• 基于cookie或session的登陆验证之安全性问题


    因为session是关了浏览器就没了。所以可以通过cookie结合session方法来做验证! 

    第一次登陆,生成一个cookie,保存一些加密的帐号信息,然后再生成一个session 
    这样去其他需要验证的页面只要验证这个新生成的session是否存在了,不需要再去数据库查询。 

    如果关了浏览器再开,去需要验证的页面,因为用来验证的session没了,就通过cookie的数据去数据库查询了对比,如果对比正确,就生成一个和上面那样的session,并且页面可以访问。 
    再去其他的验证页面,以为session在刚才访问的时候生成了,就能用来验证,就不需要通过cookie了。 

    PHP之cookie && session登录验证之实例:

    -------------------------------------------------------------cookie登录验证实例---------------------------------------------

    <html>
    <head>
    <title>Login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>

    <body>
    <form name="form1" method="post" action="login.php">
    <table width="300" border="0" align="center" cellpadding="2" cellspacing="2">
    <tr>
    <td width="150"><div align="right">用户名:</div></td>
    <td width="150"><input type="text" name="username"></td>
    </tr>
    <tr>
    <td><div align="right">密码:</div></td>
    <td><input type="password" name="passcode"></td>
    </tr>
    <tr>
    <td><div align="right">Cookie保存时间:</div></td>
    <td><select name="cookie" id="cookie">
    <option value="0" selected>浏览器进程</option>
    <option value="1">保存1天</option>
    <option value="2">保存30天</option>
    <option value="3">保存365天</option>
    </select></td>
    </tr>
    </table>
    <p align="center">
    <input type="submit" name="Submit" value="Submit">
    <input type="reset" name="Reset" value="Reset">
    </p>
    </form>
    </body>
    </html>

    -------------------------------------------------------------------------------------------------------------------------

    <?php
    @mysql_connect("localhost", "root","1981427")     //选择数据库之前需要先连接数据库服务器
    or die("数据库服务器连接失败");
    @mysql_select_db("test")      //选择数据库mydb
    or die("数据库不存在或不可用");
    //获取用户输入
    $username = $_POST['username'];
    $passcode = $_POST['passcode'];
    $cookie   = $_POST['cookie'];
    //执行SQL语句
    $query = @mysql_query("select username, userflag from users "
    ."where username = '$username' and passcode = '$passcode'")
    or die("SQL语句执行失败");
    //判断用户是否存在,密码是否正确
    if($row = mysql_fetch_array($query))
    {
    if($row['userflag'] == 1 or $row['userflag'] == 0)    //判断用户权限信息是否有效
    {
    switch($cookie)         //根据用户的选择设置cookie保存时间
    {
    case 0:         //保存Cookie为浏览器进程
    setcookie("username", $row['username']);
    break;
    case 1:         //保存1天
    setcookie("username", $row['username'], time()+24*60*60);
    break;
    case 2:         //保存30天
    setcookie("username", $row['username'], time()+30*24*60*60);
    break;
    case 3:         //保存365天
    setcookie("username", $row['username'], time()+365*24*60*60);
    break;
    }
    header("location: main.php");      //自动跳转到main.php
    }
    else
    {
    echo "用户权限信息不正确";
    }
    }
    else
    {
    echo "用户名或密码错误";
    }
    ?>

    -------------------------------------------------------------------------------------------------------------------------

    <?php
    session_start();
    if(isset($_COOKIE['username']))
    {
    @mysql_connect("localhost", "root","1981427")     //选择数据库之前需要先连接数据库服务器
    or die("数据库服务器连接失败");
    @mysql_select_db("test")      //选择数据库mydb
    or die("数据库不存在或不可用");
    //获取Session
    $username = $_COOKIE['username'];
    //执行SQL语句获得userflag的值
    $query = @mysql_query("select userflag from users "
    ."where username = '$username'")
    or die("SQL语句执行失败");
    $row = mysql_fetch_array($query);
    //获得用户权限信息
    $flag = $row['userflag'];
    //根据userflag的值输出不同的欢迎信息
    if($flag == 1)
    echo "欢迎管理员".$_COOKIE['username']."登录系统";
    if($flag == 0)
    echo "欢迎用户".$_COOKIE['username']."登录系统";
    echo "<a href="logout.php" mce_href="logout.php">注销</a>";
    }
    else
    {
    echo "您没有权限访问本页面";
    }
    ?>

    -------------------------------------------------------------------------------------------------------------------------

    <?php
    setcookie("username");
    echo "注销成功";
    ?>

    php session应用实例--登录验证:

    <html>
    <head>
    <title>Login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>

    <body>
    <form name="form1" method="post" action="login.php">
    <table width="300" border="0" align="center" cellpadding="2" cellspacing="2">
    <tr>
    <td width="150"><div align="right">用户名:</div></td>
    <td width="150"><input type="text" name="username"></td>
    </tr>
    <tr>
    <td><div align="right">密码:</div></td>
    <td><input type="password" name="passcode"></td>
    </tr>
    <tr>
    <td><div align="right">Cookie保存时间:</div></td>
    <td><select name="cookie" id="cookie">
    <option value="0" selected>浏览器进程</option>
    <option value="1">保存1天</option>
    <option value="2">保存30天</option>
    <option value="3">保存365天</option>
    </select></td>
    </tr>
    </table>
    <p align="center">
    <input type="submit" name="Submit" value="Submit">
    <input type="reset" name="Reset" value="Reset">
    </p>
    </form>
    </body>
    </html>

    -------------------------------------------------------------------------------------------------------------------------

    <?php
    @mysql_connect("localhost", "root","1981427")     //选择数据库之前需要先连接数据库服务器
    or die("数据库服务器连接失败");
    @mysql_select_db("test")      //选择数据库mydb
    or die("数据库不存在或不可用");
    //获取用户输入
    $username = $_POST['username'];
    $passcode = $_POST['passcode'];
    //执行SQL语句获得Session的值
    $query = @mysql_query("select username, userflag from users "
    ."where username = '$username' and passcode = '$passcode'")
    or die("SQL语句执行失败");
    //判断用户是否存在,密码是否正确
    if($row = mysql_fetch_array($query))
    {
    session_start();        //标志Session的开始
    //判断用户的权限信息是否有效,如果为1或0则说明有效
    if($row['userflag'] == 1 or $row['userflag'] == 0)
    {
    $_SESSION['username'] = $row['username'];
    $_SESSION['userflag'] = $row['userflag'];
    echo "<a href="main.php" mce_href="main.php">欢迎登录,点击此处进入欢迎界面</a>";
    }
    else          //如果权限信息无效输出错误信息
    {
    echo "用户权限信息不正确";
    }
    }
    else           //如果用户名和密码不正确,则输出错误
    {
    echo "用户名或密码错误";
    }
    ?>

    -------------------------------------------------------------------------------------------------------------------------

    <?php

    session_start();
    unset($_SESSION['username']);
    unset($_SESSION['passcode']);
    unset($_SESSION['userflag']);

    // 最后彻底销毁session.
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰
             session_destroy();

    echo "注销成功";
    ?>

    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         <?php
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    // 初始化session.
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰
             session_start();
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    /*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    $_SESSION = array();
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    /***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    if (isset($_COOKIE[session_name()])) {
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰               
    setcookie(session_name(), '', time()-42000, '/');
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰          }
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    // 最后彻底销毁session.
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰
             session_destroy();
    php session登录验证实例与 cookie登录验证实例 - 笑看风云之直面人生 - 折翅的鹰         
    ?>

    由此我们可以得出删除Session的步骤:
    session_start()
    $_SESSION=array()/unset($_SESSION['xxx'])
    session_destroy()

    -------------------------------------------------------------------------------------------------------------------------

    <?php
    session_start();
    if(isset($_SESSION['username']))
    {
    @mysql_connect("localhost", "root","1981427")     //选择数据库之前需要先连接数据库服务器
    or die("数据库服务器连接失败");
    @mysql_select_db("test")      //选择数据库mydb
    or die("数据库不存在或不可用");
    //获取Session
    $username = $_SESSION['username'];
    //执行SQL语句获得userflag的值
    $query = @mysql_query("select userflag from users "
    ."where username = '$username'")
    or die("SQL语句执行失败");
    $row = mysql_fetch_array($query);
    //判断当前数据库中的权限信息与Session中的信息比较,如果不同则更新Session的信息
    if($row['userflag'] != $_SESSION['userflag'])
    {
    $_SESSION['userflag'] = $row['userflag'];
    }
    //根据Session的值输出不同的欢迎信息
    if($_SESSION['userflag'] == 1)
    echo "欢迎管理员".$_SESSION['username']."登录系统";
    if($_SESSION['userflag'] == 0)
    echo "欢迎用户".$_SESSION['username']."登录系统";
    echo "<a href="logout.php" mce_href="logout.php">注销</a>";
    }
    else
    {
    echo "您没有权限访问本页面";
    }
    ?>

    -------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    Android程序反编译的方法(转)
    VMware的Easy Install安装
    Oracle ORA12514:TNS:监听程序当前无法识别连接描述符中请求的服务
    Java Eclipse 如何导入外部Jar包
    Oracle IMP00010: 不是有效的导出文件,标题验证失败
    怎样取消Windows 2003 server 意外关机提示
    没有文件扩展“.vbs”的脚本引擎的解决方案
    Oracle init.ora常用配置详解
    eclipse断点调试 出现Source not found
    VMware Workstation 8
  • 原文地址:https://www.cnblogs.com/milantgh/p/3619499.html
Copyright © 2020-2023  润新知