3.1.1 PHP中SESSION的学习

什么是SESSION?

Session的定义:在计算机中,尤其是在网络应用中,称为“会话控制”。

具体到Web中的SESSION指的就是:用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。

因此,从上述的定义中可以看到,SESSION是一个特定的时间概念。

为什么要使用SESSION?

1.HTTP协议是一种无状态的协议;即同一个客户端的本次请求和上次请求没有对应关系,HTTP服务器并不知道这两个请求来自同一个客户端。

优点:减轻服务器的压力
缺点:每次请求都会传输大量重复的内容信息

2.SESSION提供在PHP脚本中定义全局变量的方法,使得这个全局变量在同一个SESSION中对于所有的PHP脚本文件都有效。所以,SESSION是基于HTTP服务器的用于保持状态的方法。

3.SESSION允许通过将数据存储在HTTP服务器中,以在整个用户会话过程中保持该数据;所以,SESSION不仅是一个时间概念,还包括了特定的用户和服务器。

SESSION的工作原理

不同浏览器存储COOKIE的位置

  • 在windows系统上(win7为例)浏览器的cookie数据存储在:%APPDATA%\Microsoft\Windows\Cookies\xxx.txt
  • Firefox的cookie数据存储在:%APPDATA%\Firefox\Profiles\xxx.default\cookies.sqlite
  • Chrome的Cookie数据存储在:%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies

会话标识符(sessionID)

  • 会话由一个唯一标识符标识,可使用session_id函数读取此标识符。为PHP应用程序启用会话状态时,将检查应用程序中每个页面请求是否又浏览器发送的sessionID值。如果未提供任何sessionID值,则PHP将启动一个新会话,并将该会话的sessionID值随响应一起发送到浏览器。
  • 默认情况下,sessionID值存储在Cookie中;也可以实现在URL中存储sessionID。
  • 只要一直使用相同的sessionID值来发送请求,会话就被视为活动的;如果特定会话的请求时间超过指定的超时值(以秒为单位),则该会话被视为已过期。如果使用过期的sessionID值发送的请求将生成一个新的会话。

与SESSION相关的PHP函数

session_start

描述:启动新会话或者重用现有会话
语法:bool session_start([ array $options = [] ])
说明:
A. $options参数是一个关联数组,如果提供的话,则会用其中的项目覆盖“会话配置”中的配置选项
B. 如果通过GET或者POST方式,或者使用cookie提交了会话ID,则会重用现有会话

<?php

header('content-type:text/html;charset=utf-8');

session_start();//开始SESSION会话

$_SESSION['username'] = 'jikesn';//存储SESSION数据

session_id

描述:获取/设置当前会话ID
语法:string session_id([ string $id ])
说明:
A. 如果指定$id参数的值,则使用指定值作为会话ID
B. 必须在调用session_id()函数之前调用session_start()函数

<?php

header('content-type:text/html;charset=utf-8');

session_name('jikesn_');
session_start();//开始SESSION会话

$_SESSION['userId'] = 6;
$_SESSION['username'] = 'jikesn';//存储SESSION数据
echo 'sessionID是:', session_id(), '<br>';
echo 'sessionName是:', session_name(), '<br>';
echo 'userId是:', $_SESSION['userId'], '<br>';
echo 'username是:', $_SESSION['username'], '<br>';

session_destroy

描述:销毁一个会话中的全部数据
语法:bool session_destroy (void)
说明:session_destroy() 销毁当前会话中的全部数据, 但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。 如果需要再次使用会话变量, 必须重新调用 session_start() 函数。

注意: 通常情况下,在你的代码中不必调用 session_destroy() 函数, 可以直接清除 $_SESSION 数组中的数据来实现会话数据清理。

<?php

header('content-type:text/html;charset=utf-8');

session_start();
session_destroy();

PHP配置中的SESSION片段

session.atuo_start (boolean)

描述:session.auto_start指定会话模块是否在请求开始时自动启动。默认为0(不启动)。

session.name (string)

描述:指定会话名以用做cookie的名字,只能由字母数字组成,默认为PHPSESSID。

session.save_handler (string)

描述:定义用来存储和获取与会话关联的数据的处理器的名字,默认为files。

session.save_path (string)

描述:定义传递给存储处理器的参数,如果选择默认的files文件处理器,则值是文件的路径。

session.gc_maxlifetime (integer)

描述:指定过了多少秒之后数据就会被视为“垃圾”并可能被清除,默认值是1440秒,即24分钟。垃圾收集可能在会话启动期间发生(取决于session.gc_probabilitysession.gc_divisor)。

session.gc_probability (integer) 、session.gc_divisor (integer)

描述:定义在每个会话初始化时启动gc (garbage collection,垃圾回收)进程的概率,此概率通过gc_probability/gc_divisor计算。

本文是全系列中第20 / 24篇:PHP快速入门

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部