什么是 Cookie?
cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,能够创建并取回 cookie 的值。
一、关于创建cookie
setcookie(name, value, expire, path, domain);
例子:
下面的例子会设置一个cookie键值对,过期时间为1小时,服务器会将该cookie发送到客户端。(在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码)
<?php setcookie("user", "Alex Porter", time()+3600); ?> <html> <body> </body> </html>
二、服务器端如何取回cookie
PHP 的 $_COOKIE 超全局变量用于取回 cookie 的值。
在下面的例子中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:
<?php // Print a cookie echo $_COOKIE["user"]; // A way to view all cookies print_r($_COOKIE); ?>
在下面的例子中,我们使用 isset() 函数来确认是否已设置了 cookie:
<html> <body> <?php if (isset($_COOKIE["user"])) //确认是登录态,继续操作 else //重定向到登录界面 ?> </body> </html>
由于使用了setcookie()设置cookie信息,浏览器端以后每次向该域内的php脚本发送请求时,都会自动在请求头上加上cookie字段。上面这种方法可用于防止用户绕过登录界面,直接访问内部页面。(因此setcookie()一般应该在登录界面验证成功后使用),有了cookie验证之后,才可以维护已登录用户的状态。
三、如何删除cookie
当删除 cookie 时,您应当使过期日期变更为过去的时间点。
删除的例子:
<?php // set the expiration date to one hour ago setcookie("user", "", time()-3600); ?>
四、cookie总结
Cookie在项目实战中都有哪些应用:
1>记住用户名密码
2>在cookie的生命周期之内,维护用户的登录状态
Cookie的优缺点
1>优点:a.不需要服务器资源空间 b.持久时间更长
2>缺点:a.客户端大小受限制 b.用户禁用Cookie那么就废用了 c.不安全
(6)Cookie和Session的区别和联系
1>联系:Cookie可以在客户端为session保存唯一标识(sessionID)
2>区别:Cookie机制采用的是在客户端(浏览器)保持状态的方案,而session机制采用的是在服务器端保持状态的方案
关于session
一、session 变量
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (sessionID),并基于这个 sessionID 来存储变量。sessionID 存储在 cookie 中,亦或通过 URL 进行传导。
二、开始启动会话
<?php session_start(); ?> <html> <body> </body> </html>
session_start()做了哪些初始化工作?
上面的代码首先会尝试在服务器端读取客户端发来的请求报文中名为sessionID的cookie值。若没有读取到,说明用户首次登录,会向服务器注册用户的会话,同时会为用户会话分配一个 sessionID。并且将名为sessionID的cookie发送给客户端。
关于sessionID的产生:
PHP在使用默认的 session.save_handler = files 方式时,PHPSESSIONID的生产算法原理如下:
hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)
从以上hash_func(*)中的数据采样值的内容分析,多个用户在同一台服务器时所生产的PHPSESSIONID重复的概率极低(至少为百万份之一)
如何获取sessionID的值?
session_id() 可以用来获取/设置 当前会话 ID。类似cookie机制,我们也可以通过检查sessionID的值是否存在,来验证用户是否是已登录状态。
<?php session_start(); echo session_id(); // 输出 08nr1fav9jqs2pdi5qlpsmd247 ?>
三、存储session变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:
<?php session_start(); // store session data $_SESSION['views']=1; ?> <html> <body> <?php //retrieve session data echo "Pageviews=". $_SESSION['views']; ?> </body> </html>
四、销毁session
unset() 函数用于释放指定的 session 变量:
<?php unset($_SESSION['views']); ?>
也可以通过 session_destroy() 函数彻底终结 session: (session_destroy() 将重置 session,您将失去所有已存储的 session 数据。)
<?php session_destroy(); ?>
五、session总结
Session项目实战中都有哪些应用:
1>记录用户登陆信息,全局使用
2>制作验证码,验证对比操作
3>将session保存到数据库可以实现:a.控制一个帐号只能一个人登录
Session的优缺点:
1>session的优点:唯一性、方便调用、不会过多占用资源,是存储在服务器的一组临时数据。一般情况下,我们在做用户登录时,会将用户数据存入session。这样,在任何页面都可以方便调用,而且 每个客户端会产生唯一的session_id,不会混肴。并且在关闭浏览器后,服务器会有session回收机制,自动删除过期session
2>缺点:在客户端是以cookie方式保存的,禁用cookie就没用了。
Session和Cookie的联系以及区别:
1>联系:Session在客户端也需要保存一个标识,所以就要借助Cookie,session是通过cookie来工作的session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
2>区别:Cookie机制采用的是在客户端(浏览器)保持状态的方案,而session机制采用的是在服务器端保持状态的方案