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