php session位置,Session存放在什么位置(Session持久化) | Soo Smart!

我们都知道Session存放在服务器端, cookie存放在用户端(浏览器管理)。那Session具体存放在服务器的什么位置呢?

本文收集下各个服务器对Session的管理之一:存储方式。

PHP Session存储位置

Apache Session 存储位置

Weblogic Session存储位置

Tomcat Session存储位置

PHP Session存储位置

PHP配置文件中session.save_path负责session文件的存放位置。

如果没有配置则不会生成session文件,如果配置的目录session.save_path = "D:/sessionFolder"不存在,也会出错。Warning: session_start() [function.session-start]: open(D:/sessionFolder\sess_e0b64760c92422d81c1d6202b66884f6, O_RDWR) failed: No such file or directory (2) in E:\APMServ5.2.6\www\htdocs\session\index.php on line 13

Warning: Unknown: open(D:/sessionFolder\sess_e0b64760c92422d81c1d6202b66884f6, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (D:/sessionFolder) in Unknown on line 0

php会话控制-session: http://www.gwalker.cn/article-121-cmd

Apache Session 存储位置

apache有个扩展模块用来支持session(mod_session)。session的一些特性和管理又被分割到子模块中。(mod_session_cookie, mod_session_crypto, mod_session_dbd)。通过这些模块可以配置Session存储到数据库中或者内存中或者依赖cookie.

一段数据库存储的示例。

Sample DBD configuration

DBDriver pgsql

DBDParams "dbname=apachesession user=apache password=xxxxx host=localhost"

DBDPrepareSQL "delete from session where key = %s" deletesession

DBDPrepareSQL "update session set value = %s, expiry = %lld, key = %s where key = %s" updatesession

DBDPrepareSQL "insert into session (value, expiry, key) values (%s, %lld, %s)" insertsession

DBDPrepareSQL "select value from session where key = %s and (expiry = 0 or expiry > %lld)" selectsession

DBDPrepareSQL "delete from session where expiry != 0 and expiry < %lld" cleansession

Weblogic Session存储位置

1. 内存存储 Memory (single-server, non-replicated)

2. 文件系统持久化策略 File system persistence

3. JDBC持久化策略 JDBC persistence

4. 基于Cookie的Session持久化策略 Cookie-based session persistence

5. 基于内存的可复制Session存储 In-memory replication (across a cluster)

Weblogic的session持久化策略是在weblogic.xml的persistent-store-type参数中 指定,缺省状态下为memory,共有如下所列几种选项:

* memory—不启用Session持久化.

* replicated—跟 memory一样, 但是session数据可以在集群服务器之间复制.

* replicated_if_clustered—如果Web应用时部署在一个集群服务器中,是replicated的,否则为memory

* async-replicated—异步的session复制

* async-replicated-if-clustered—如果是在集群环境中,启用replicated,否则启用in memory模式。

* async-jdbc—异步的基于jdbc的session持久化

* jdbc—使用数据库来进行session的持久化.

* cookie—所有的session数据存储在用户端的cookie中.

Tomcat Session存储位置

Session的持久化是由Session Manager来管理的,Tomcat提供了两个实现类:

org.apache.catalina.session.StandarManager

org.apache.catalina.session.PersistentManager

1、StandarManager是默认的Session Manager。它的实现机制是:当Tomcat服务器关闭或重启,或Web应用被重新加载时,会将内存中所有的HttpSession对象保存到文件系统中,默认的文件路径是:%CATALINA_HOME%\work\Catalina\\SESSIONS.ser

重启Tomcat后,Tomcat服务器把SESSIONS.ser中的持久化HttpSession对象加载到内存中。

2、PersistentManager能够把HttpSession对象保存到Session Store中,它提供了比较StandarManager更灵活的管理功能,具有容错能力,控制内存中HttpSession对象的数目等。

Tomcat实现Session Store的接口为org.apache.catalina.session.Store,目前提供了两个实现这一接口的类:org.apache.catalina.session.FileStore和org.apache.catalina.session.JDBCStore。FileStore会将HttpSession对象保存到文件系统中;而JDBCStore则将HttpSession对象保存到数据库表中。

其他话题:

Session 共享 (Session replication): Session会被复制到多个节点中

粘性Session (Session sticky): Session不会被复制到多个节点中。

网上一些非常不错的参考文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值