Cookie与Session的普通登陆与自动登陆原理解析
一般网站上如果有用户模块,那都会有用户登陆、下次自动登陆、退出等操作。那我们应该如果合理的处理这些呢?是放入cookie中,还是放入session中呢?
一般用户登陆是放在服务器的session中,而有些自动登陆的话,就是把登陆信息放入cookie中。如何实现呢?先上图:文件所示共4个文件
login.php简单的html表单提交页面,看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>登录</title> </head> <body> <form action="do_login.php" method="post"> username <input type="text" name="username" /><br> password <input type="password" name="password" /><br> remember <input type="checkbox" name="remember" /><br> <input type="submit" value="Login" /> </form> </body> </html> |
do_login.php处理登陆的页面代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<meta charset="UTF-8"> <?php /** * * @author LiZeQiao <674531003@qq.com> * @version */ //自定义KEY $key="0873264FFA5BA2AB3"; //开启session session_start(); //假设用户登陆(本需数据库查询,这里为了简洁方便,故此) if($_POST['username']=='admin' && $_POST['password']=='123456'){ //登录成功 $user['id']=1; //用户id $user['name']='admin'; //用户显示名称 //将数组放入session $_SESSION['user']=$user; //如果选中记住我,就将登录信息放入Cookie中 if($_POST['remember'] == '1'){ //将登录信息,存放在Cookie中 $value=serialize($user); $md5str=md5($value.$key); setcookie('autoLogin', $md5str . $value ,time()+60*60*24*30,'/'); } header('Location: index.php'); }else{ echo '用户名或密码不匹配'; } |
index.php页面主要是判断session是否存在、cookie是否存在。不存在就直接跳转登陆页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<?php /** * * @author LiZeQiao <674531003@qq.com> * @version */ //在do_login页面自定义的KEY 必须相符合 $key="0873264FFA5BA2AB3"; //开启Session session_start(); //如果Session中没有登录信息,尝试从Cookie中加载用户信息 if(empty($_SESSION['user']['id'])){ $value=$_COOKIE['autoLogin']; // 去掉魔术引号 if (get_magic_quotes_gpc()) { $value=stripslashes($value); } $md5str=substr($value,0,32); $value=substr($value,32); //校验 if(md5($value . $key) == $md5str){ $user=unserialize($value); $_SESSION['user']=$user; } } ?><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>首页</title> </head> <body> <div class="top">欢迎您 <?php if(isset($_SESSION['user']['id'])){ echo $_SESSION['user']['name']; echo ' <a href="logout.php">注销</a>'; }else{ echo ' <a href="login.php">请登录</a>'; } ?> </div> </body> </html> |
logout.php主要是用户退出操作.将session与cookie删除
1 2 3 4 5 6 |
<?php //注销 session_start(); unset($_SESSION['user']); setcookie('autoLogin','',time()-1,'/'); header('Location: index.php'); |
网盘下载地址:http://pan.baidu.com/s/1eQCaA9G
- js获取滚动条高度+滚动条到底部加载ajax下一页
- 分享一个电脑技术人员外快