PHP SESSION 操作
Session的声明与使用
Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start()。session_start()函数的语法格式如下:
Bool session_start(void) //创建Session,开始一个会话,进行Session初始化
注意:session_start()函数之前不能有任何输出
注册一个会话变量和读取Session
在PHP中使用Session变量,除了要启动之外,还要经过注册的过程。注册和读取Session变量,都要通过访问$_SESSION数组完成。在$_SESSION关联数组中的键名具有和PHP中普通变量相同的命名规则。注册Session变量的代码如下所示:
<?php
//启动session的初始化
session_start();
//注册session变量,赋值为一个用户的名称
$_SESSION["username"]="skygao";
//注册session变量,赋值为一个用户的ID
$_SESSION["uid"]=;
?>
执行该脚本后,两个Session变量就会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下。
注销变量与销毁Session
当使用完一个Session变量后,可以将其删除,当完成一个会话后,也可以将其销毁。如果用户退出Web系统,就需要为他提供一个注销的功能,把他的所有信息在服务器中销毁。销毁和当前Session有关的所有的资料,可以调用session_destroy()函数结束当前的会话,并清空会话中的所有资源。该函数的语法格式如下所示:
bool session_destroy(void) //销毁和当前Session有关的所有资料
该函数并不会释放和当前Session相关的变量,也不会删除保存在客户端Cookie中的Session ID。
因为$_SESSION数组和自定义的数组在使用上是相同的,所以我们可以使用unset()函数来释放在Session中注册的单个变量。如下所示:
unset($_SESSION['键名']);
一定要注意,不要使用unset($_SESSION)删除整个$_SESSION数组,这样将不能再通过$_SESSION超全局数组注册变量了。但如果想把某个用户在Session中注册的所有变量都删除,可以直接将数组变量$_SESSION赋上一个空数组。如下所示:
$_SESSION=array()
PHP默认的Session是基于Cookie的,SessionID被服务器存储在客户端的Cookie中,所以在注销Session时也需要清除Cookie中保存的SessionID,而这就必须借助setCookie()函数完成。在PHP脚本中,可以通过调用session_name()函数获取Session名称。删除保存在客户端Cookie中的Session
ID,代码如下所示:
<?php
//判断Cookie中是否存在session ID
if(isset($_COOKIE[session_name()])){
//删除包含Session ID的cookie,注意第四个参数一定要和php.ini设置的路径相同
setcookie(session_name(),'',time()-,'/');
}
?>
通过前面的介绍可以总结出,Session的注销过程共需要4个步骤。在下例中,提供完整的四个步骤代码,运行该脚本就可以关闭Session,并销毁与本次会话有关的所有资源。代码如下所示:
<?php
//第一步:开启Session并初始化
session_start(); //第二部:删除所有Session的变量,也可以用unset($_SESSION[XXX])逐个删除
$_SESSION = array(); //第三部:如果使用基于Cookie的session,使用setCookkie()删除包含Session ID的cookie
if(isset($_COOKIE[session_name()])) {
setCookie(session_name(), "", time()-, "/");
} //第四部:最后彻底销毁session
session_destroy(); ?>
仔细讲解SESSION的删除
第一种方式:unset($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。
其作用和session_unregister()相同。
session_unregister()在PHP5中已经废弃。
php 官方删除session方式
<?php
// 初始化session.
session_start();
/*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
$_SESSION = array();
/***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-, '/');
}
// 最后彻底销毁session.
session_destroy();
?>
unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_session变量。
第二种方式:session_unset() 或者 $_SESSION=array() 删除多个session
第三种方式:session_destroy()结束当前的会话,并清空会话中的所有资源。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。
小结:
session_destroy是注销所有的session变量,并且结束session会话;
如果希望删除一些session数据,则可以使用unset()函数或session_destroy()函数。unset()函数的作用是释放指定的session变量,调用格式如下:
1
2
3
|
<?php unset( $_SESSION [ 'jugelizi' ]); ?> |
session_destroy()函数的作用是将session全部删除,调用格式如下:
1
|
<?PHP session_destroy(); ?> |
提示:session_destroy()会重新设置session,你会丢失所有已保存的session数据。
session_unset()并不注销session变量,但把所有的session变量的值清空。
最新文章
- [Tool]使用ConfuserEx混淆代码
- PHP常用函数、数组方法
- ASP.NET管道
- JavaScript中的类型转换(二)
- Linux下备份系统至另一硬盘
- C#使用指针表达式
- primefaces 带参数的组件
- Magento资源问题上CDN方案研究
- FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全
- list_删除元素
- Hibernate查询对象的方法浅析
- Python Threading问题:TypeError in Threading. function takes 1 positional argument but 100 were given
- 前端开发常用 Linux 命令
- gdb调试用法
- 解决Tax discount configure 报出异常
- AdminLTE 动画时间
- 巧妙利用SVN 实现复制需要部署的文件。
- 【BZOJ3932】[CQOI2015]任务查询系统 主席树
- POJ 1386 Play on Words(单词建图+欧拉通(回)路路判断)
- re模块之re.match
热门文章
- 【阅读笔记】Ranking Relevance in Yahoo Search (二)—— maching learned ranking
- CodeForces - 1047B Cover Points
- Linux服务器有大量的TIME_WAIT状态
- 常用设计模式的实现,以及Netty中的设计模式
- C. Two Arrays(思维DP或组合数学)
- A. A Twisty Movement dp
- M - 昂贵的聘礼 最短路 dij
- openshift 4.3 Istio的搭建(istio 系列一)
- LeetCode--LinkedList--160. Intersection of Two Linked Lists(Easy)
- 一步步打造QQ群发消息群发器