首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(008)系统学习PHP之Cookie和Session

在开始深入 会话基础 学习之前先回顾一些实用的基础知识。

1Cookie的使用

setcookie — 发送 Cookie:

setcookie(name, value, expire, path, domain);

Cookie 名称。

Cookie 值。这个值储存于用户的电脑里,请勿储存敏感信息。 比如是'cookiename',可通过$_COOKIE['cookiename']获取它的值。

Cookie 的过期时间。基本可以用 time() 函数的结果加上希望过期的秒数

Cookie 有效的服务器路径。

设置成'/'时,Cookie 对整个域名有效。如果设置成'/foo/', Cookie 仅仅对中/foo/目录及其子目录有效。

Cookie 的有效域名/子域名。

设置成子域名(例如'www.example.com'),会使 Cookie 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。

要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是'example.com')

2Session的使用

2.1 开始session:

session_start();

2.2 存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量

$_SESSION['views']=1;// 赋值

echo $_SESSION['views'];//取值

2.3 删除某些 session 数据,可以使用 unset()

unset($_SESSION['views']);

或 session_destroy() 函数。

session_destroy();

注意:session_destroy 并不会立即的销毁全局变量 $_SESSION 中的值,只有当下次再访问的时候,$_SESSION 才为空,因此如果需要立即销毁 $_SESSION,可以使用 unset 函数。

关于 COOKIE 与 SESSION 更加详细的用法,还是参考官网提供的手册!

3关于Cookie

PHP 透明地支持HTTPcookie。cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。可以用 setcookie() 或 setrawcookie() 函数来设置 cookie。cookie 是HTTP标头的一部分,因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的限制类似。可以使用输出缓冲函数来延迟脚本的输出,直到按需要设置好了所有的 cookie 或者其它HTTP标头。PHP通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,PHP都会自动的将他存储在$_COOKIE的全局变量之中,因此我们可以通过$_COOKIE[‘key’]的形式来读取某个Cookie值。

因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。

header("Set-Cookie:cookie_name=value");

php中没有删除Cookie的函数,因为cookie是通过HTTP的标头来传递的,客户端根据服务端返回的Set-Cookie段来进行cookie的设置,如果删除cookie需要使用新的Del-Cookie来实现,则HTTP头就会变得复杂,实际上仅通过Set-Cookie就可以简单明了的实现Cookie的设置、更新与删除。还有,cookie最多存储 4kb 文件,大概 300 个cookie文件,一旦超过限制,也会随机删除cookie!

了解原理以后,我们也可以直接通过header来删除cookie。

header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));

这里用到了gmdate,用来生成格林威治标准时间,以便排除时差的影响。

4关于Seesion

4 理论基础之session

在PHP中使用session非常简单,先执行session_start方法开启session,然后通过全局变量$_SESSION进行session的读写。session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。

默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题。

session是将用户的会话数据存储在服务端,没有大小限制,通过一个session_id进行用户识别,PHP默认情况下session id是通过cookie来保存的,因此从某种程度上来说,seesion依赖于cookie。但这不是绝对的,sessionid也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session。

在PHP中,每一个session都有一个ID。这个sessionID是一个有PHP随机生成的加密数字。这个id 通过cookie存储在客户的浏览器中,或者直接通过URL传递到客户端,如果在URL中看见一段长串加密数字,那这就很可能是个sessionID。sessionID就像一把钥匙用来注册到session变量中,而这些session变量是存储在服务器端的,sessionID是客户端唯一的会话数据。

总 结

cookie将数据存储在客户端,建立起用户与服务器之间的联系,通常可以解决很多问题,但是cookie仍然具有一些局限:

COOKIE 与 SESSION 都是用于解决 HTTP Web 无状态的问题。

cookie相对不是太安全,容易被盗用导致cookie欺骗

单个cookie的值最大只能存储4k

每次请求都要进行网络传输,占用带宽

cookie有效期与session有效期不同,cookie是可以设置生效时间,到了设定的生效时间就会注销cookie,session则不提供生效时间期限,它可以说是无限期的,但在关闭浏览器时,session会自动消失。

cookie是服务器留在用户计算机上的小文件,当相同的计算机通过浏览器请求页面时,它同时会发送Cookie,实现原理是当客户端浏览器连接到一个 URL时,它会首先扫描本地存储的cookie,如果发现其中有此URL 相关的cookie,将会把它们返回给服务端。

END

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180221G0BR8Q00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com