php cookie记录登录信息的原理和实例
发布时间:2023-11-03 11:02:33 所属栏目:PHP教程 来源:网络
导读: 我大概是这样做的:
(1)生成用户验证token
用户登录后我会生成一个token,该token可能由如下信息组成:username+ip+expiration+salt【只是举例】,然后将组成
(1)生成用户验证token
用户登录后我会生成一个token,该token可能由如下信息组成:username+ip+expiration+salt【只是举例】,然后将组成
我大概是这样做的: (1)生成用户验证token 用户登录后我会生成一个token,该token可能由如下信息组成:username+ip+expiration+salt【只是举例】,然后将组成信息用可逆加密函数加密得到token,并将该token保存到数据库,写入cookie; (2)最后这样去校验信息,判断用户的登录状态 将token解密,验证用户username,如果存在,继续;然后验证token是否和存入数据库的token相同,如果相同继续;验证cookie的有效期expiration,如果有效继续;验证ip是否变化,若变化跳入登录。。。。。。甚至还可以验证user agent. 例子 php session应用实例--登录验证: 代码如下 1 2 3 用户名: 4 密码: 5 Cookie保存时间: 6 7 8 ------------------------------------------------------------------------------------------------------------------------- 9 @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 "欢迎登录,点击此处进入欢迎界面"; } else //如果权限信息无效输出错误信息 { echo "用户权限信息不正确"; } } else //如果用户名和密码不正确,则输出错误 { echo "用户名或密码错误"; } ?> 10 ------------------------------------------------------------------------------------------------------------------------- 11 12 session_start(); unset($_SESSION['username']); unset($_SESSION['passcode']); unset($_SESSION['userflag']); 13 // 最后彻底销毁session. session_destroy(); 14 echo "注销成功"; ?> 15 // 初始化session. session_start(); /*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/ $_SESSION = array(); /***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/ if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最后彻底销毁session. session_destroy(); ?> 16 由此我们可以得出删除Session的步骤: ①session_start() ②$_SESSION=array()/unset($_SESSION['xxx']) ③session_destroy() 17 ------------------------------------------------------------------------------------------------------------------------- 18 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 "注销"; } else { echo "您没有权限访问本页面"; } ?> 19 ------------------------------------------------------------------------------------------------------------------------- 20 -------------------------------------------------------------cookie登录验证实例--------------------------------------------- 21 22 23 用户名: 24 密码: 25 Cookie保存时间: 26 27 28 ------------------------------------------------------------------------------------------------------------------------- 29 @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 "用户名或密码错误"; } ?> 30 ------------------------------------------------------------------------------------------------------------------------- 31 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 "注销"; } else { echo "您没有权限访问本页面"; } ?> 32 ------------------------------------------------------------------------------------------------------------------------- 33 setcookie("username"); echo "注销成功"; ?> 34 最后说明: 1.上面保证了token每次登录都会不一样,这回导致之前的token【既cookie】失效 2.cookie的有效期最好不超过一周 3.在客户端COOKIES中保存用户ID和一个加密码(规则只有我知道) 4.如果程序检测到客户端保存的COOKIES ID。就去跟数据库验证加密码,如果一致则返回对应用户的登录信息,否则返回FALSE 感觉效率和安全性都不是很好 1.用户访问每个页面都要去跟数据库验证一遍 2.加密码虽然规则很复杂,但是保存在客户端依然存在被破解的可能性 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐