128.深入 cookie ,session

来源:互联网 发布:mysql分页查询语句代码 编辑:程序博客网 时间:2024/05/17 01:38

1. Cookie

当我们用 php 设置 cookie 时,实际上是客户端根据服务端返回的Set-Cookie段来进行cookie的设置。<?php    setcookie('user','hello',time()+30);?>

这里写图片描述

而当客户端有 cookie 存在,请求中会带有 cookie

这里写图片描述

单个cookie的值最大只能存储4k每次请求都要进行网络传输,占用带宽

2. Session

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

开始 PHP Session

注释:session_start() 函数必须位于 < html> 标签之前:<?php     session_start();?>上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。这个 UID 是基于 Cookie 或者 URL 传导

这里写图片描述
这里写图片描述

设置 session

session_start();$_SESSION['key'] = $value;

取回 session

session_star();  // 记得开启 session_start(),不然不能获取同一个UIDecho $_SESSION['key'];

终结 Session

unset($_SESSION['key']);session_destroy(); // 将重置 session,您将失去所有已存储的 session 数据。如果要删除所有的session,可以使用session_destroy函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在。值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。

3. cookie 与 session 的区别:

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个//session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如: <form name="testform" action="/xxx"> <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> <input type="text"> </form>
默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题,
一般来说,登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高
//保存时间:session 指发呆时间,清醒的话,从新计算。cookie 指定多少时间就是多少时间。
//总结:1.cookie 保存在客户端,session保存在服务器端2.cookie 以字符串形式保存,session可以保存多种数据类型(用的时候要声明)3.保存时间,sesssion 指发呆时间(清醒的话,重新计算).cookie 时间是个绝对值

http://blog.csdn.net/fangaoxin/article/details/6952954/

https://my.oschina.net/kevinair/blog/192829

http://blog.csdn.net/enlyhua/article/details/48175989

http://blog.csdn.net/enlyhua/article/details/50437732

http://blog.csdn.net/enlyhua/article/details/50479737

0 0
原创粉丝点击