[关闭]
@greenfavo 2015-10-04T03:38:04.000000Z 字数 3261 阅读 1647

php学习笔记(六)session与cookie实现自动登录

php


一,session

有时候需要在用户访问网站过程中记住用户的一些信息,比如用户登录后,网站中的所有页面都能显示用户的登录名,这就需要在网站中使用一种全局变量来保存用户名。但普通变量的作用域只能在一个网页内,当用户在各个网页之间跳转时,前一张网页中的变量常量就丢失了。session就是解决这一问题的。只要把用户的信息存储在session变量中,就能在整个网站中获取到。

session代表了服务器与客户端之间的"会话",意思是服务器和客户端在不断地交流通信。如果不使用session,客户端的每次请求都是独立的,这是因为http协议是无状态的,利用http协议无法跟踪用户。

在PHP中,使用$_SESSION[]可以设置和获取特定用户的session信息,session表示当前用户的信息,因此每个用户的session是独立的。当浏览器关闭这个session就永远访问不到了。在不关闭浏览器时,session的默认有效期是24分钟,超过24分钟在该网站没有操作,session对象就会失效。不过可以用ini_set()或在php.ini中修改默认有效期。

二,cookie

session只能让网站记住当前正在访问的用户,但有时需要记住曾经访问的用户。cookie能为网站和用户带来很多好处,如它可以记录特定用户的访问次数,最后一次的访问时间,浏览历史以及使登录成功的用户下次自动登录。

cookie实际上是一个很小的文本文件,每个cookie文件的大小不能超过4KB,每个站点最多只能设置20个cookie。网站通过向用户磁盘写入cookie文件来标识用户。当用户再次访问该网站时,浏览器会将cookie信息发给服务器来验证和识别用户。

cookie有2中形式:会话cookie和永久cookie.前者是临时性的,只在浏览器打开时存在,主要用来实现session技术;后者则永久地放在用户的硬盘上并在有效期内一直可用。

在PHP中利用setcookie()函数可以创建和修改cookie,以及设置cookie的有效期,使用$_COOKIE[]数组可读取cookie变量的值。

三,例子:session和cookie实现用户自动登录

有4个文件:login.php展示登录界面和读取cookie,session-cookie.php验证登录,登录成功后设置session和cookie,test-session.php新打开一个页面测试session是否可用,outLogin.php退出登录注销session。

login.php

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>session与cookie实现用户登录</title>
  6. <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
  7. </head>
  8. <body>
  9. <form method="post" action="session-cookie.php">
  10. 用户名:<input type="text" id="username" name="username"/><br/>
  11. 密码:<input type="password" id="password" name="password"/><br/>
  12. <input type="submit" name="submit" value="登录" /><br>
  13. </form>
  14. <?php
  15. //判断是否有cookie
  16. ob_start();//打开缓冲区
  17. if (isset($_COOKIE['username'])&&isset($_COOKIE['password'])) {?>
  18. <script type="text/javascript">
  19. $(function() {//如果有cookie就直接填充到表单,自动登录
  20. $("#username").val("<?php echo $_COOKIE['username']; ?>");
  21. $("#password").val("<?php echo $_COOKIE['password'];?>");
  22. });
  23. </script>
  24. <?php }
  25. ?>
  26. </body>
  27. </html>

session-cookie.php

  1. <?php
  2. session_start();
  3. header("Content-type:text/html;charset=utf8");
  4. require 'conn.php';
  5. if (isset($_POST['submit'])) {//如果点击了登录按钮
  6. if (isset($_SESSION['username'])) {//判断之前是否设置了session
  7. echo "欢迎你 ".$_SESSION['username'];
  8. echo "<a href='outLogin.php'>退出登录</a>";
  9. }else{
  10. $username=$_POST['username'];
  11. $password=$_POST['password'];
  12. $sql="select * from user where username='$username' and password='$password'";
  13. $result=mysql_query($sql);
  14. if ($result) {//如果用户名和密码匹配
  15. echo $username."登录成功";
  16. echo "<a href='outLogin.php'>退出登录</a>";
  17. $_SESSION['username']=$username;//将用户名存入session
  18. setcookie("username",$username,time()+60);//设置cookie
  19. setcookie("password",$password,time()+60);//60s后过期
  20. }else{
  21. echo "用户名或密码错误";
  22. }
  23. }
  24. }
  25. ?>

test-session.php

  1. <?php
  2. session_start();
  3. header("Content-type:text/html;charset=utf8");
  4. if (isset($_SESSION['username'])) {
  5. $user=$_SESSION['username'];
  6. echo $user."欢迎再次访问";
  7. }else{
  8. echo "你还没有登录";
  9. header("location: login.php");//重定向到登录界面
  10. }
  11. ?>

outLogin.php

  1. <?php
  2. session_start();
  3. header("Content-type:text/html;charset=utf8");
  4. //退出登录,注销session
  5. if (isset($_SESSION['username'])) {
  6. unset($_SESSION['username']);//删除该session
  7. header("location: login.php");//注销成功,重定向到登录界面
  8. }
  9. ?>

四,session与cookie比较

相同点:都是为了存储和跟踪特定用户的信息,都可以在整个站点的所有页面访问到。
不同点:
1,session存储在服务端,记住正在访问的用户;cookie存储在客户端,记住曾经访问过的用户。
2,cookie有大小和数量的限制,每个站点最多20个,最大4KB;session没有限制,但设置太多当访问用户很多时会很占服务器内存。
3,因为保存在客户端,cookie可能会泄露用户隐私,带来其他安全问题。
4,session仍然要通过cookie来实现,因为用户的sessionID必须保存在会话cookie中。

五,总结

session和cookie在后端语言中很常见,用法都差不多,都是那几个步骤。只要掌握了其思想,无论用哪种语言都能很轻松实现,当然我觉得在php中使用最简单。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注