设为首页 收藏本站
查看: 683|回复: 0

[经验分享] php session小节

[复制链接]

尚未签到

发表于 2015-8-27 09:51:09 | 显示全部楼层 |阅读模式
  1.为什么要用session?
  在人们访问网站的时候,有很多个网页,由于http自身的特点,用户每执行一个脚本都需要和web服务器重新建立连接。由于他们之间是无状态的,这次的连接无法得到上次连接的状态(一个脚本可能有多个网页,按网页来算)。这用,用户在一个脚本中对变量赋值,在其它的脚本中无法得到这个值。而session的作用就是一个全局变量,对session赋值在各个脚本中都可以使用。
  
  2.session的特点
  session的产生与用户(或浏览器,对同一个网站ie 和chrome会产生不同的session)服务器(或网站)都有关。不同的客户或浏览器访问相同的网站或服务器(其实是看服务器的,如果一个网站正常产品跟团购产品是放在两个服务器上,则他们的session是存在于各自的服务器上的。这种情况下就需要做session共享。)产生不同的session,相同的客户访问不同的服务器也会产生不同的session。例如A用户通过Session定义了一个全局变量$user=“wind”中,而B用户通过Session定义的全局变量$user=“jane”。那么在A用户所访问的脚本中,$user的值就是wind。
  
  3.php中session的保存
  session是以文件的形式保存在服务器端的。php.ini中有个配置项 session.save_path= "";这个里面填写的路径,将会使session文件保存在该路径下。session文件的命名格式是:"sess_[PHPSESSID]"。每一个文件里面都保存了一个会话(session)的数据。其实只要使用代码$_SESSION['user_id'] = $value;就会促发php的session机制,结果往对应的session文件中写入一个值。服务器端储存的session文件是不会删除的,只会过期。
  
  4.session.save_path下面有很多保存的session文件,php如何知道调用哪个session文件?
  在首次使用session_start()的时候会在客户端创建一个以PHPSESSID为名的cookie,例如session文件名为sess_d4heb14q4sp2rmq8m936m9ptv5,cookie的名字为PHPSESSID值为d4heb14q4sp2rmq8m936m9ptv5,这样php就知道调用哪个session文件了。
  如果在服务器端删除session文件,当客户端再次访问时还是会创建与删除session文件同名的session文件。因为,在客户端访问的时候会将本地储存在cookie中的PHPSESSID值传给服务器端,服务器端根据该值来创建session文件。
  但是客户端的cookie失效或者被删除后,再次访问时就会创建一个新的session文件,但服务器端就会有一个无效的session文件。所有的session文件不会被自动删掉,只是有个过期时间,以此决定:是新生成一个session文件还是使用原来的。
  其实,这些都是由session_start();来实现的。session_start()已经封装了发送cookie的操作。在调用session_start()的时候会往服务器端发送本地PHPSESSID的cookie,如果存在该cookie,如果服务器端有该session文件,直接向该文件写数据,如果没有该文件这创建与该cookie同名的session文件(这才出现来删除session文件还会创建同名的session文件)。如果本地没有储存的PHPSESSID的cookie,这在本地创建一个该cookie,并且在服务器端创建该session文件。(这个地方是哪个先创建,不知)
  
  cookie的名字PHPSESSID是可以改的,在php.ini中 session.name = PHPSESSID就是设置该cookie的名字。
  session与cookie唯一的关联就是就是存储session的ID号PHPSESSID。其他,不管你设置什么cookie,使用session的时候是不会用到这些值的。也无法获取到。比如同步登陆,即使设置了cookie,你的应用也必须依据session来判断,不能基于cookie判断,cookie是可以被修改的(事实上必须如此,因为session保存在服务器端)。
  
  5.用法
  Session 是用于保持状态的基于 Web服务器的方法。Session 允许通过将对象存储在 Web服务器的内存中在整个用户会话过程中保持任何对象。
  在Web上,Session的作用就是它在 Web服务器上保持用户的状态信息供在任何时间从任何页访问。因为浏览器不需要存储任何这种信息,所以任何浏览器都可以使用session来传值,保持用户的状态信息。
  但是,随着越来越多用户登录,Session 所需要的服务器内存量也会不断增加。如果每个 Session 中保持许多对象,并且许多用户同时使用 Web应用程序(创建许多 Session),则用于 Session 持久性的服务器内存量可能会很大,从而影响了可伸缩性。
  
  6.PHP Session使用过程
  在应用session的时候,把session看成一个储存在服务器端的全局数组就可以来,如果你想存储一个$value值,只需要这样做$_SESSION['value'] = $value;就是一个$_SESSION的数组。
  在使用session赋值之前要先使用session_start();函数,来创建session文件
  在使用结束后,例如登出网站,要释放session或者销毁session。就要用session_unset();和session_destory();
  因此,释放用户的session所有资源,需要顺序执行如下代码:
  <?php
session_start();
session_unset();
session_destroy();
?>
  也可以sesion_start();$a=array();$_SESSION=$a;(赋值一个空数组,即清空session)session_destroy();
  有时候要用到unset();释放session中的一个变量。例如unset($_SESSION['history_user']);
session_unset()释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id,不需要传参数
session_destroy()删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留,不需要传参数
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104877-1-1.html 上篇帖子: PHP类的静态(static)方法和静态(static)变量 下篇帖子: 【PHP学习笔记】用户注册模块用户类以及验证码类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表