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

php中文网
发布: 2016-06-17 08:31:58
原创
1351人浏览过

通常我们说session可以依托cookie实现,这主要是站在客户端的角度。我想知道在服务端的存储情况。session是存储在内存中,那么在Java/PHP的后台中,一次网页请求(JSP/PHP)其中的网页中的对象/变量的生命周期是怎么样的,SESSION相关对象/变量是如何长时间贮存于内存中,而不销毁的?
PS:web小白

PHPShops多用户商城系统
PHPShops多用户商城系统

随着电子商务模式更加多样化,企业和个人的迫切需求,PHPShops多用户商城系统正可以为其提供专业的电子商务解决方案。社区化电子商务,主要面向行业类和地方门户类站点。 PHPShops多用户商城系统(简称PHPShops)是基于电子商务的一套平台交易系统,它采用目前最流行网站建设工具PHP+MYSQL,实现模版分离技术,通过HTML交互式网页技术来实行客户端与服务器端的交流。无论在

PHPShops多用户商城系统 0
查看详情 PHPShops多用户商城系统

回复内容:

客户端初次请求时,如果会使用到session,此时服务端通过响应头中的Set-Cookie这样一个header项,把sessionId写回到浏览器的cookie中,这种Cookie也叫SessionCookie,在整个浏览器关闭之后就被清除了。而再次请求时,浏览器发送的请求头中会包含cookie这样一项header:即刚才写回来的sessionId,再次到达服务器时,根据这个sessionId,配置之前为请求创建的session,从而所有以这个sessionId保存的信息都存了下来。
服务端这个session默认超时时间是30分钟,就是30分钟没有使用就被清除掉了。而如果一直在使用,则每次active时间会被更新,到了30分也不会被清除。
而至于session存在哪里,只是一种具体的实现形式,比如为了实现session的高可用,可能会把session存到Memcache或者Redis中,甚至存在数据中也是可以的,存取一致即可。 session就分为存储和传递两部分。一般情况下储存是以文件形式存在缓存目录(tmp)中的,可以修改成多种形式,比如memcache储存。传递方面一般都是通过会话生命周期的cookie来传递,当会话结束后cookie就没了,所以就以为session也没了,实际上服务端的session还存在。当然传递还可以改成其他方式,比如做app接口无法使用cookie传递,那么就使用get或post方式来传递session_id,总之了解清楚session原理后,做接口很方便了。 泻药

session cookie 就是 cookie 的一种,cookie 就是存在浏览器里的,服务端不一定需要有对应的存储。

而服务端有存储的 session,一般是指 session id,客户端可以是通过 cookie 维持,也可以通过其他方式维持,服务端根据 session id 映射到用户会话数据,这些数据保存在服务端,传输时只传 session id。

服务端具体怎么存,这就很多种了,有基于文件的,有放在应用内存里的,有存到关系型数据库的,也有存到 NoSQL 的。

答得比较抽象,但正如很多技术问题一样,一个术语要描述清楚需要用到别的术语才能严谨。详细答案可以参考以下链接。

en.m.wikipedia.org/wiki

en.m.wikipedia.org/wiki java中的实现,根据servlet规范,cookie中放一个JSESSIONID
tomcat有一个SessionManager,差不多就是Session session = map.get("JSESSIONID");
然后session有过期机制。
具体看tomcat代码去。 浏览器的php程序目录下有文件保存session信息,文件流也是php默认保存session的方式。而目前类似于百度这样的高并发网站一般都用memcache甚至其他更高科技的手段保存session数据。
服务器端的session用session_id这种类似于数据库外键的东西和客户端cookie里面的PHPSESSION字段做联系。 session 在服务端和浏览器都有储存的内容

类似于银行取钱
浏览器存的叫做session_id 类似于银行卡号
服务器存的就是你的会话信息

当浏览器访问服务器时,会把这个数字带给浏览器。服务器会根据这个数字提取相应的信息,所以说session_id很重要,可能会被不法分子利用
所以有的时候你去支付某些东西的时候,还需在进一步验证。

如果你关闭浏览器,服务端,这些信息也不会丢,只是你下一次打开浏览器,生成session_id和上一次不一样了。

难道这些信息会永久保存吗?
不,这些信息会过期,过期服务端就将这些信息丢弃,所以一段时间后,即使,你一直没关闭浏览器,也要重新登录。就像银行数据库信息丢失,你有卡也没用。

根据服务端的配置不同,这些信息丢失的时间也不同。

上述是java tomcat服务器的逻辑实现方式
相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号