Session

Posted diligentyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session相关的知识,希望对你有一定的参考价值。

了解Session
Session从用户访问页面开始,到断开与网站链接为止,形成Session的生命周期。用户每一次连接时,php都会自动生成一个唯一的SessionID以标识当前用户,与其他用户进行区分。
进行Session会话时,SessionID会分别保存在客户端和服务器端两个位置。在客户端,使用临时的Cookie保存在浏览器指定目录中(称为Seeion Cookie);在服务器端,以文本文件形式保存在指定的Session目录中。
Session在Web技术中占有非常重要的地位。由于网页是一种无状态的连接程序,一次无法记录用户的浏览状态。必须通过Session记录用户的有关信息,以供用户再次以此身份对Web服务器提供要求时作确认。例如,在电子商务网站中,通过Session记录用户登录的信息以及用户所购买的商品,如果没有Session,用户就会没进入一个页面都要输入用户名和密码。


启动Session
启动PHP会话方式有两种,一种是应用session_start()函数,另一种是应用session_register()函数会话登录一个变量来隐含的启动会话。
1:通过session_start()函数创建会话。
语法如下
bool session_start(void);
说明:使用session_start()函数之前,浏览器不能有任何输出,否则会产生错误。
技巧:在php.ini中session.auto_start = 0改为session.auto_start = 1,每次就会自动启动session,就不用再写session_start()了
2:通过session_register()函数创建会话。
session_register()函数用来为会话登录一个变量来隐含地启动会话,但要求设置php.ini文件的选项,将register_globals = On,然后重启Apache
注意:使用session_register()函数时,不要调用session_start()函数,PHP会在注册变量之后隐含地调用session_start()函数。
会话启动后,全部被保存在全局数组$_SESSION中,通过全局数组$_SESSION创建一个会话变量很容易,只需要直接给该数组增加一个元素即可。
例如:
session_id() 可以用来获取/设置 当前会话 ID。

echo session_id();

运行结果为
1227693046193ef98b245fdd4cfb6b2a

session_start();//启动session
$_SESSION["name"]=null;//声明一个名为name的变量,并赋空值

应用Session
PHP中的Session有一个非常强大的功能:可以保存当前用户的特定数据和相关信息。可保存数据类型包括字符串、数组和对象等。将各种类型的数据添加到Session中,必须应用全局数组$_SESSION[]。
例如:
session_start();//启动session
$str="107网站工作室";
if(empty($_SESSION[name])){//判断Session会话变量是否为空
    $_SESSION[name]=$str;//将字符串赋值给会话变量
    echo $_SESSION[name];//输出会话变量
}else{
    echo $_SESSION[name];
}

运行结果为:
107网站工作室 
例如:
session_start();//启动session
$arr=array('PHP从入门到精通','PHP网络编程自学手册','PHP函数参考大全','PHP开发范例宝典');
$_SESSION[mr_book]=$arr;
foreach($_SESSION[mr_book] as $key=>$value){
    echo $value."---";
}

运行结果为:
PHP从入门到精通---PHP网络编程自学手册---PHP函数参考大全---PHP开发范例宝典--- 


删除Session
删除会话的方法主要有删除单个会话、删除多个会话和结束当前会话三种。
1:删除单个会话。
例如:
注销$_SESSION[‘name‘]变量,可以使用unset()函数,代码如下:
unset($_SESSION[‘name‘]);
注意:unset()函数,要注意不可一次注销整个$_SESSION数组,至少要保留一个元素,否则会禁止整个会话功能。如果使用unset($_SESSION)函数将全局变量$_SESSION销毁,则无法将其恢复,用户也不能再注册$_SESSION变量。
2:删除多个会话
如果要一次注销所有的会话变量,可以将一个空的数组赋值给$_SESSION,代码如下
$_SESSION=array();
3:结束当前会话
如果整个会话已经结束,首先应该注销所有的会话变量,然后使用session_destroy()函数清除当前已经结束的会话,并清空会话中所有资源,彻底销毁Session
session_destroy();
session_destroy() 销毁当前会话中的全部数据, 但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。 如果需要再次使用会话变量, 必须重新调用 session_start() 函数。 


以上是关于Session的主要内容,如果未能解决你的问题,请参考以下文章

一个队asp.net session进行了再次封装的C#类的代码

redis存储session配制方法

少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

sqlserver-处理死锁

暑假自学JAVA Web心得

hibernate在使用getCurrentSession时提示no session found for current thread