什么是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_probability
和session.gc_divisor
)。
session.gc_probability (integer) 、session.gc_divisor (integer)
描述:定义在每个会话初始化时启动gc (garbage collection,垃圾回收)
进程的概率,此概率通过gc_probability/gc_divisor
计算。
本文是全系列中第20 / 24篇:PHP快速入门
- 1.1.1 PHP课程介绍
- 1.1.2 代码编辑器的安装和PHP环境的配置
- 1.1.3 PHP基础语法
- 1.2.1 PHP中的变量
- 1.2.2 PHP中的数据类型
- 1.2.3 PHP中的数据类型转换与比较
- 1.3.1 PHP中的常量
- 1.3.2 PHP中的预定义变量
- 1.4 PHP中的表达式与运算符
- 1.5 PHP中的流程控制
- 2.1.1 PHP函数的结构
- 2.1.2 PHP函数的参数
- 2.1.3 PHP复杂函数
- 2.1.4 PHP函数实战
- 2.2.1 PHP字符串函数库简介
- 2.2.2 PHP字符串函数实战练习
- 2.3 PHP数组简介和定义方式
- 2.4.1 PHP数组的使用、转换、运算符
- 2.4.2 PHP数组的应用
- 3.1.1 PHP中SESSION的学习
- 3.1.2 PHP中COOKIE的学习
- 3.2.1 PHP文件目录函数库简介/操作/实战
- 3.2.2PHP文件操作相关的常用函数与类的封装
- 3.3 深入浅出MySQL数据库