SESSION概述

1、什么是SESSION?

  • Session对象存储特定用户的会话数据;
  • Session将会话数据存储在服务器端;
  • Session是基于Cookie技术的,没有Cookie就没有Session;
  • Session在整个用户会话中,一直存在下去;
  • 一个用户会话时效:从用户登录开始,到用户登录结束;
  • Session存储的数据量要比cookie大的多;
  • Session存储的内容类型,不限于字符串(八大数据类型都可以);
  • Session数据存储在服务器端,更安全,可靠。

2、SESSION的工作原理

SESSION的工作原理
SESSION的工作原理

3、开启SESSION会话功能

  • 描述:启动新会话或者重用现有会话 ;
  • 语法:

    bool session_start (void )
  • 提示:$_SESSION变量默认是不存在的,与$_POST、$_GET、$_FILES不一样。因此,必须先开启SESSION,才能使用$_SESSION变量;
  • 提示:每个需要SESSION数据的页面,都要开启SESSION功能;
  • 注意:SESSION功能,不能重复开启(同一个页面不能开2次);
  • 返回:成功开始会话返回 TRUE ,反之返回 FALSE。

提示:SESSION文件的保存位置 c:\windows\temp

SESSION操作

1、添加SESSION数据

  • 描述:对Session的管理(增删改查),都是通过超全局数组$_SESSION进行的;
  • 语法:$_SESSION[key] = value
  • 提示:一个网站不管添加多少个SESSION数据,最终在浏览器端只存储一个SESSION的ID值,该ID值是经过加密的,并且永不重复。Key只能是String类型的数据。
  • SESSION文件在服务器端的存储位置:c:\windows\temp

2、读取SESSION数据

  • 语法:

    $value = $_SESSION[key]
  • 提示:每次SESSION操作,都要先开SESSION功能;

    bool session_start (void )

3、删除SESSION数据

  • 使用 unset() 函数,删除一个SESSION数据;
unset($_SESSION['userName']); // 删除内存中的SESSION数据
unset($_SESSION['password']);

此种删除方法无效:

unset($_SESSION); // 不能直接删除$_SESSION数组

4、销毁SESSION文件

  • 描述:删除当前的SESSION文件,不影响其它的SESSION文件。
  • 语法:

    bool session_destroy ( void ) // 删除服务器中的SESSION文件

SESSION对应COOKIE的配置(php.ini)

1、SESSION对应COOKIE过期时间设置

修改php.ini配置项:session.cookie_lifetime

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0

2、SESSION对应COOKIE有效路径设置

修改php.ini配置项:session.cookie_path

; The path for which the cookie is valid.
; http://php.net/session.cookie-path
session.cookie_path = /

3、SESSION对应COOKIE域名有效性设置

修改php.ini配置项:session.cookie_domain

; The domain for which the cookie is valid.
; http://php.net/session.cookie-domain
session.cookie_domain =

4、是否仅限https来发送SESSION对应的COOKIE数据

修改php.ini配置项:session.cookie_secure

; http://php.net/session.cookie-secure
;session.cookie_secure =

5、是否仅限http来使用SESSION对应的COOKIE数据

修改php.ini配置项:session.cookie_httponly

; 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垃圾回收机制

1、什么是SESSION的垃圾回收机制?

  • SESSION垃圾回收, 就是将过期的SESSION服务器文件删除的机制;
  • SESSION会自动删除那些过期的服务器端session数据区文件;
  • 修改php的配置文件php.ini

2、垃圾回收的周期:session.gc_maxlifetime

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime = 1440

提示:每24分钟清理一次。

3、垃圾回收的概率:session.gc_divisor

回收周期:每24分钟,清理一次SESSION垃圾文件。

回收概率:1/1000,得到一个百分比,如果达到了100%就清理。每1000人访问,才会清理一次。

首先判断时间是否达到24分钟,如果时间达到24分钟,再看访问的人数够不够1000。如果人数够1000,则进行清理,如果人数没有达到1000,则不清理,要等第2个24分钟。

; Defines the probability that the 'garbage collection' process is started on every
; session initialization. The probability is calculated by using the following equation:
; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
; session.gc_divisor is the denominator in the equation. Setting this value to 100
; when the session.gc_probability value is 1 will give you approximately a 1% chance
; the gc will run on any given request. Increasing this value to 1000 will give you
; a 0.1% chance the gc will run on any given request. For high volume production servers,
; this is a more efficient approach.
; Default Value: 100
; Development Value: 1000
; Production Value: 1000
; http://php.net/session.gc-divisor
session.gc_divisor = 1000