Sessin简介

1.session定义:

       在计算机中,尤其是在网络应用中,称为“会话”。具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。

2.session工作原理:

(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。

(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。

(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。

(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

3.session使用方法:

Session 是 用于保持状态的基于 Web服务器的方法。Session 允许通过将对象存储在 Web服务器的内存中在整个用户会话过程中保持任何对象。

Session 通常用于执行以下操作

存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览 Web应用程序时需要的其它信息。

存储只需要在页重新加载过程中或按功能分组的一组页之间保持其状态的对象。

Session 的作用就是它在 Web服务器上保持用户的状态信息供在任何时间从任何页访问。因为浏览器不需要存储任何这种信息,所以可以使用任何浏览器,即使是像 PDA 或手机这样的浏览器设备。

持久性方法的限制

随着越来越多用户登录,Session 所需要的服务器内存量也会不断增加。

访问 Web应用程序的每个用户都生成一个单独的 Session 对象。每个 Session 对象的持续时间是用户访问的时间加上不活动的时间。

如果每个 Session 中保持许多对象,并且许多用户同时使用 Web应用程序(创建许多 Session),则用于 Session 持久性的服务器内存量可能会很大,从而影响了可伸缩性。

 4.session与cooike的区别:

来源于https://www.zhihu.com/question/19786827/answer/21643186

1、session 在服务器端,cookie 在客户端(浏览器)
2、session 默认被存在在服务器的一个文件里(不是内存)
3、session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在        url 中传递 session_id)
4、session 可以放在 文件、数据库、或内存中都可以。
5、用户验证这种场合一般会用 session

因此,维持一个会话的核心就是客户端的唯一标识,即 session id

5.php 挂起webSocket后如何获取session里对应客户端的消息 如何区分他们?

来源于https://www.zhihu.com/question/266495474/answer/309255705

PHP自带的SESSION会话机制是这样的:

PHP-FPM根据浏览器传来的一个名为PHPSESSID的HTTP cookie确定要访问的会话文件,然后填充超全局变量$_SESSION.

WebSocket建立连接时,也可以拿到这个HTTP cookie(注意跨域问题:AJAX跨域区分域名和端口,COOKIE区分域名但不区分端口),同理你可以根据这个PHPSESSID读取服务器上的会话文件,unserialize反序列化就能拿到会话数组,如果你要写入会话,记得先用 flock($fp, LOCK_EX) 排它锁锁定后再写入,只是读的话就不需要了.

 不建议使用PHP自带的SESSION会话机制,除非你的应用定位就是单台服务器.否则还是建议使用cookie验证身份(解密cookie,根据id比对salt),Redis存储用户数据:

user:10001:name => 'tux'

user:10001:age => 27

这样不同语言都可以访问到这些数据,而且可以把程序部署到其他服务器也没有问题.

6.SESSION在服务端(PHP/JAVA)具体是如何实现的?

客户端初次请求时,如果会使用到session,此时服务端通过响应头中的Set-Cookie这样一个header项,把sessionId写回到浏览器的cookie中,这种Cookie也叫SessionCookie,在整个浏览器关闭之后就被清除了。而再次请求时,浏览器发送的请求头中会包含cookie这样一项header:即刚才写回来的sessionId,再次到达服务器时,根据这个sessionId,配置之前为请求创建的session,从而所有以这个sessionId保存的信息都存了下来。
服务端这个session默认超时时间是30分钟,就是30分钟没有使用就被清除掉了。而如果一直在使用,则每次active时间会被更新,到了30分也不会被清除。
而至于session存在哪里,只是一种具体的实现形式,比如为了实现session的高可用,可能会把session存到Memcache或者Redis中,甚至存在数据中也是可以的,存取一致即可。
链接:https://www.zhihu.com/question/39752827/answer/82927414

转载于:https://www.cnblogs.com/12qw/p/8607841.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值