session和cookie的联系

1.区别

     session存在于服务器,以文件的形式,安全,量大

     cookie是基于浏览器(客户端)的,相对不安全,大小限制,

2.session_start()的时候做了什么(A区间:生成)

     a.服务器生成了对应的session_id;

     b.服务器生成了对应session_id对应的文件:文件内存储此session_id对应的用户的设置的变量等信息

[root@localhost tmp]# vim sess_14ts81p47ooq1amutuohdt3nl1 

isLogin|i:1;username|s:11:"18520638660";ad_|a:3:{s:7:"isLogin";i:1;s:8:"username";s:5:"admin";s:8:"userinfo";a:8:{s:2:"id";s:1:"1";s:8:"password";s:32:"e10adc3949ba59abbe56e057f20f883e";s:8:"username";s:5:"admin";s:5:"email";s:12:"[email protected]";s:11:"create_time";s:19:"2018-06-13 14:38:10";s:6:"status";s:1:"1";s:10:"is_deleted";s:1:"0";s:8:"is_admin";s:1:"1";}}h_|a:2:{s:7:"isLogin";i:1;s:8:"username";s:6:"linxun";}

     c.当session_start()的时候其实自动setcookie(session_name(), session_id(), time()+3600, '/');后面两个参数根据服务器上的配置而自动给。这一步最为重要,因为这样子你的cookie中就有了session的捆绑。

3.每次访问项目都会调用session_start()不会一直生成新的session?(B区间:捆绑)

   a.session_start()时,会先进行cookie中的session_name的获取,如果其中的session_name不为空,意味着session被保留在cookie中,从而进行了捆绑

   b.以上由于cookie中的session_name的存在,此次的session_start()并不会执行以上步骤2的任何操作,而是进行绑定了cookie中对应的session_name即捆绑对应服务器的session_id以及对应的session_id对应的文件

4.setcookie(session_name(), '', time()-3600, '/');是什么作用

   将浏览器中的cookie中的session捆绑取消,session_start()重新进入其A区间生成,且重新进行cookie中session_name的赋值捆绑

5.捆绑session之后的数据访问

   由于上面的不走明显的说明的session捆绑的步骤,就不详细说了,

   捆绑了session_id,每次访问项目(即访问服务器)都是带着session_id的,也就是绑定了对应的session_id对应的session文件

   所以通过$SESSION进行的变量的增删改查都是对自己的这个session_id对应的文件进行操作

   即:用户a自己进行CURD的文件为session_id为1的文件

          用户b自己进行CURD的文件为session_id为2的文件

          他们都进行了各自的$SESSION['username'] = a;(a用户操作)

                                           $SESSION['username'] = b;(b用户操作)

   但是他们获取的$SESSION['username']是各自自己所设置的,互不干扰,因为他们带过来的钥匙不一样,打开的柜子不一样,柜子里面变量名同为鞋子的物品不一样,一个是nike,一个是adidas。

发布了83 篇原创文章 · 获赞 18 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/HoeWang/article/details/86289994