php session和cookie

session和cookie是会话管理的两种方式

1,cookie

cookie存在客户端,隐藏在http头中传达给服务器。在php中通过setcookie()创建和销毁cookie。

创建(生存周期为7天):

setcookie("name","value",time()+60*60*24*7);    //未设置第三个参数(有效截至日期)时,会在关闭浏览器后过期

创建value为数组的cookie:

setcookie("user[name]", "cookieone");
setcookie("user[id]", "cooietwo");   //这样访问$_COOKIE["user"],它便是一个数组

注意不要在cookie里直接存敏感信息,创建前不能有任何东西输出给浏览器,因为cookie是http头的一部分。自动登陆的验证或防止cookie伪造,可以采取比如:hash(部分密码+特定字符串方式)处理用户验证

销毁(把有效期设置为当前时间之前某一时间):

setcookie("name","value",time()-1);  //保证这个时间是过去的值就行

访问($_COOKIE为超全居数组,任何地方直接使用)

$name=$_COOKIE["name"]

注意,从cookie取得的数据页是不可信的,永远不要相信用户输入!

2,session

session有两种方式:基于cookie和使用url。一般使用基于cookie的方式。服务器建立session会话之后会为用户分配一个sessionid,并在服务器端的session保存目录里生成对应该id的文件,以后便凭借这个id来识别用户。

这个id一般存在cookie里(cookie默认名称为PHPSESSID,可以通过session_name()取得,可以在配置文件里修改session.name,值为php随机生成。还有很多session的配置都在配置文件里,比如有效时间,默认为0;启用垃圾回收的概率等)。

用户禁止浏览器使用cookie时,sessionid可以通过url传递(配置文件里如果session.use_trans_sid =1,在不支持cookie时php会自动把sessionid加在url上,不过不建议这种方式,因为用户会分享网址!这个配置默认为0)

1)session的开始

session_start();    //每个使用session的脚本都需要包含这个,返回类型为bool

使用这个函数后,php也许会检查是否有过期无效的session文件,检查的概率可以配置。然后自动生成sessionid或者从服务器硬盘存session的文件夹中取得该id对应的所有信息压入内存(这一点自己可以通过memory_get_usage(),microtime(true)这两个函数验证)

2)设置session信息

$_SESSION["key"]="ualue";    //<span style="color:#FF0000;">脚本结束后再写入session文件,因此当前设置的脚本不能访问$_SESSION["key"]

3)取得session值

$x=$_SESSION["key"];    //超全居数组,直接使用

 4)销毁

SESSION发出去的COOKIE一般在浏览器关闭后,才会过期,假如需要人为强制过期,需要人工销毁。

1,session_start();
2,$_SESSION=array();//删除内存中的值
3,setcookie(session_name(),' ',time() -1);//删除浏览器端cookie
4, session_destroy();// 删除session文件和id,彻底销毁

大神更为详细的解读:http://www.cnblogs.com/acpp/archive/2011/06/10/2077592.html

3,session、cookie

session大部分情况下也是基于cookie的,只是把重要的、敏感的信息没有存在cookie,只存了一个随机字符串(sessionid)而已

在配置文件里还可以设置只接受来自cookie的sessionid

cookie一般是做长时间记忆登陆的(比如一个月内不用登陆),session一般持续到浏览器关闭

cookie理论上也可以用作网站每个页面的身份识别,但是因为cookie的数据是不可信的,每次都需要对信息有所检验,而session信息存在服务器端,自然不存在这个问题。

session在网站大量采用ajax的情况下,需要处理并发问题,因为有时候多个进程在操作同一个session





原文地址:https://www.cnblogs.com/jcuan/p/5558466.html