详解PHP会话存储方式

  先确认会话是否自动开启还是需要通过session_start()来手动开启:

  ; 指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)

  ; Initialize session on request startup.

  ; http://php.net/session.auto-start

  session.auto_start = 0

  在客户端,会话可以存储在cookie或者通过URL参数来获取。依赖于服务器的配置:

  ; 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)

  ; Whether to use cookies.

  ; http://php.net/session.use-cookies

  session.use_cookies = 1

  ; 指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。

  ; This option forces PHP to fetch and use a cookie for storing and maintaining

  ; the session id. We encourage this operation as it's very helpful in combatting

  ; session hijacking when not specifying and managing your own session id. It is

  ; not the end all be all of session hijacking defense, but it's a good start.

  ; http://php.net/session.use-only-cookies

  session.use_only_cookies = 1

  如果确认存储在cookie中,则可以进一点配置会话存储在cookie中的各项配置,如cookie_name,cookie_lifetime,cookie_path,cookie_domain,cookie_secure,cookie_httponly

  ; Name of the session (used as cookie name).

  ; http://php.net/session.name

  session.name = PHPSESSID

  ; Lifetime in seconds of cookie or, if 0, until browser is restarted.

  ; http://php.net/session.cookie-lifetime

  session.cookie_lifetime = 0

  ; The path for which the cookie is valid.

  ; http://php.net/session.cookie-path

  session.cookie_path = /

  ; The domain for which the cookie is valid.

  ; http://php.net/session.cookie-domain

  session.cookie_domain =

  ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.

  ; http://php.net/session.cookie-httponly

  session.cookie_httponly =

  在服务器端,同样也可以通过多种方式来存储会话。默认会话存储在文件中,此时session.save_path为创建存储文件的路径。

  ; Handler used to store/retrieve data.

  ; http://php.net/session.save-handler

  session.save_handler = files

  ; Argument passed to save_handler. In the case of files, this is the path

  ; where data files are stored. Note: Windows users have to change this

  ; variable in order to use PHP

  's session functions.

  ;

  ; The path can be defined as:

  ;

  ; session.save_path = "N;/path"

  ;

  ; where N is an integer. Instead of storing all the session files in

  ; /path, what this will do is use subdirectories N-levels deep, and

  ; store the session data in those directories. This is useful if you

  ; or your OS have problems with lots of files in one directory, and is

  ; a more efficient layout for servers that handle lots of sessions.

  ;

  ; NOTE 1: PHP will not create this directory structure automatically.

  ; You can use the script in the ext/session dir for that purpose.

  ; NOTE 2: See the section on garbage collection below if you choose to

  ; use subdirectories for session storage

  ;

  ; The file storage module creates files using mode 600 by default.

  ; You can change that by using

  ;

  ; session.save_path = "N;MODE;/path"

  ;

  ; where MODE is the octal representation of the mode. Note that this

  ; does not overwrite the process's umask.

  ; http://php.net/session.save-path

  ;session.save_path = "/tmp"

  PHP支持通过session_set_save_handler来实现会话处理器的自定义open, close, read, write, destroy, gc处理函数,常见的会话处理器包括使用内存型分配(如mm,memcache等),也可以使用数据库进行存储。由此可见,若需要会话存储与文件系统(例如用数据库PostgreSQL Session Save Handler或默认的文件存储files)协同工作的,此时有可能造成用户定制的会话处理器丢失了未存储数据的会话。若使用内存型分配存储,又需要考虑会话持久化存储问题。

  接下来重点讲解memcache(d?)会话处理器。

  Memcache模块提供了于memcached方便的面向过程及面向对象的接口,memcached是为了降低动态web应用 从数据库加载数据而产生的一种常驻进程缓存产品。

  Memcache模块同时提供了一个session 处理器 (memcache).

  更多关于memcached的信息请参见» http://www.memcached.org/.

  memcached是一个高性能分布式的内存对象缓存系统, 通常被用于降低数据库加载压力以提高动态web应用的响应速度。

  此扩展使用了libmemcached库提供的api与memcached服务端进行交互。它同样提供了一个session处理器(memcached)。 它同时提供了一个session处理器(memcached)。

  关于libmemcached的更多信息可以在» http://libmemcached.org/libMemcached.html查看。

  memcache会话处理器配置:

  session.save_handler = memcache

  session.save_path = "tcp://127.0.0.1:11211?persistent=0&weight=1&timeout=1&retry_interval=15,tcp://127.0.0.1:11212?persistent=0&weight=1&timeout=1&retry_interval=15,tcp://127.0.0.1:11213?persistent=0&weight=1&timeout=1&retry_interval=15,tcp://127.0.0.1:11214?persistent=0&weight=1&timeout=1&retry_interval=15"

  数据库处理器可以使用Session PgSQL来实现(此扩展被认为已无人维护)。也可以使用其它数据库来实现会话存储,只不过需要自定义处理器函数function.session-set-save-handler.php。具体自定义处理器可参见maria at junkies dot jp。

时间: 2024-09-23 09:21:19

详解PHP会话存储方式的相关文章

实例详解Android文件存储数据方式_Android

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍Android文件存储数据方式. 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法. 创建的存储文件保存在/data/data/<package name>/files文件夹下. 2.操作. 保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式. 读取文件内容:通

实例详解Android文件存储数据方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍Android文件存储数据方式. 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法. 创建的存储文件保存在/data/data/<package name>/files文件夹下. 2.操作. 保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式. 读取文件内容:通

详解Android文件存储_Android

摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念. 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念. 相

详解Android数据存储之SQLCipher数据库加密_Android

前言: 最近研究了Android Sqlite数据库以及ContentProvider程序间数据共享,我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录下,对于已经ROOT的手机来说的没有任何安全性可以,一旦被利用将会导致数据库数据的泄漏,所以我们该如何避免这种事情的发生呢?我们尝试这对数据库进行加密. 选择加密方案:  1.)第一种方案  我们可以对数据的数据库名,表名,列名就行md5,对存储的数据进行加密,例如进行aes加密(Android数据

详解springMVC两种方式实现多文件上传及效率比较_java

springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包.需要引入的jar出了springMVC的jar包外,还需要引入com.springsource.org.apache.commons.fileupload-1.2.0.jar和com.s

详解Android数据存储之Android 6.0运行时权限下文件存储的思考_Android

前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

详解Android数据存储之Android 6.0运行时权限下文件存储的思考

前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

android SharedPreferences详解(android存储用户状态信息方法)

在andorid很多应用开发中都需要记录用户登录信息,使用静态变量手机关机用户状态清除,解决方法是使用SharedPreferences存储android用户信息. 一.SharedPreferences基础知识介绍 获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Activity对象的getPreferences()方法 两种方式的区别: 调用Context对象的getSharedPreferences(

详解MongoDB实现存储物理文件和SQUID加速

之前在阅读http://www.aliyun.com/zixun/aggregation/13461.html">MongoDB GFS文档时,学习了它如何存储物理文件(包括大文件)的方式.为了加深印象,专门写了一个上传文件存储到Mongodb的示例.当然后因为是存储到文档数据库中,所以就不能用普通方式来访问这些物理文件了,这里又专门写了一个aspx页面专门读取这些文件(比如图片或MP3等),所以下载示例之后会看到两个页面,一个是uploadfile.aspx(上传),一个是getfile