[PHP]PHP的session机制,配置与高级应用
---------------------------------------------------------------------------------------------------------
一. PHP的session原理:
1.开启session_start(),服务器端产生session文件,将相关信息存储到这个文件中,文件以"sess_"为前缀,连接session_id()值来命名(内容是由特定算法生成的用户的明文信息,大型项目则须进行加密处理),同时将sessionid保留到客户端浏览器的cookie中。
2.第二次开启session_start(),浏览器判断cookie中是否有sessionid,如果有,不再创建文件,而是直接使用这个sessionid访问服务器,通过sessionid找对应的session文件,读取session中内容存储到$_SESSION数组中。
注意:session_start()前不能有任何输出,此函数向客户端发一个session_id保存在cookie中。
二. PHP机制使用session:
1.开启session
session_start();
2.存取session
$_SESSION['uname'] = 'chenwei';
3.销毁session
unset($_SESSION['uname']); //删除内存中由session数组保存的变量;$_SESSION = array()清楚所有session变量
setCookie(session_name(), '', time()-1, '/'); //删除客户端cookie中的sessionid, session_name()默认是PHPSESSID
session_destory(); //销毁服务器端session文件
三. PHP的session配置选项
查看session配置的最直接方式就是phpinfo(); 然后根据需要配置/usr/local/php/etc/php.ini文件里的session选项,其实一般默认就可以。
可以考虑更改的配置选项有:
session.cookie_lifetime = 0; //设置cookie保存时间(秒),相当于session的过期时间,0表示直到浏览器重启
session.save_handler = files; //保存和取回数据的方式,默认为文件; 涉及到存储机制,此处不作延伸
当然也可以不修改配置文件,使用系统函数,达到同样的效果:
setCookie(session_name(), session_id(), time()+1440, '/'); //设置cookie有效时间为1440秒(24’),解决关闭浏览器session丢失的现象;session在服务器上存的最长时间为24’,重新连接后才不会过期。(即保持登录功能)
四. PHP的session自动回收机制(启动概率 = session.gc_probability / session.gc_divisor)
session.gc_probability = 1 //启动几率
session.gc_divisor = 1000 //被除数,因子
session.gc_maxlifetime = 1440 //设置session的最大过期时间,默认1440''
只要客户端存在操作,session过期时间就会保持不减;当超过过期时间未操作,回收机制就会启动,将服务端session删除。
五. 基于URL传递session的id(解决客户端禁用cookie的情况)
1. url传参:
<a href="demo.php?<?php echo session_name().'='.session_id(); ?>">DEMO</a>
服务端处理:
$sid = !empty($_GET[session_name()]) ? $_GET[session_name()] : '';
session_id($sid); //设置用已有的sid开启会话,在session_start()之前
session_start();
2. 如何自动判断是否开启了cookie,并使用对应的传递方式?(使用系统自带SID常量,自动判断)
<a href="demo.php?<?php echo SID; ?>">DEMO</a>
$sid = !empty($_GET[session_name()]) ? $_GET[session_name()] : '';
if($sid != ''){
session_id($sid);
}
3. 使URL自动加session的id?
enable_trans_uid配置选项,和运行时选项session.use_trans_sid都被激活时,当客户端禁用cookie时,相对的URL将自动被修改为包含sessionid,如果没有配置或使用Windows服务器,可以使用常量SID。
Link: http://www.cnblogs.com/farwish/p/3909087.html
@黑眼诗人 <www.farwish.com>
[PHP]PHP的session机制,配置与高级应用的更多相关文章
- Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- PHP中的SESSION机制
[转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧. c ...
- [转]Cookie/Session机制详解
原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用 ...
- SESSION机制
一:Session与Cookie Session:在服务器端创建并存放在服务器的内存中的,Session的内容存储是键值对的列表,格式:名称 | 类型:长度:值 Session的生命周期:在php.i ...
- .net学习之进程外Session的配置
转载地址:http://www.cnblogs.com/rohelm/archive/2012/05/13/2498465.html 人人都知道怎么去使用session,但是初学者,尤其是自学的学生可 ...
- 关于cookie的文章(cookie与session机制)
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- Session机制详解
转自:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能 ...
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
- node模拟http服务器session机制-我们到底能走多远系列(36)
我们到底能走多远系列(36) 扯淡: 年关将至,总是会在一些时间节点上才感觉时光飞逝,在平时浑浑噩噩的岁月里都浪费掉了太多的宝贵.请珍惜! 主题: 我们在编写http请求处理和响应的代码的时 ...
随机推荐
- Sharing Configuration in ASP.NET Core SPA Scenarios
https://blogs.msdn.microsoft.com/webdev/2017/10/27/sharing-configuration-in-asp-net-core-spa-scenari ...
- CentOS 7 安装Python3.7
1 更新系统 yum update 2. 安装Python3依赖项 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sql ...
- Struts2访问web元素的各种方法
1.通过RequestAware,SessionAware,ApplicationAware获取: 在Struts2中不能直接访问Request,Session,Application元素,但是可以使 ...
- Hive数据据类型 DDL DML
Hive的基本数据类型 DDL DML: 基本数据类型 对于Hive而言String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以 ...
- Echarts动态加载柱状图的实例
一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 10 ...
- Java中的Map List Set等集合类
一.概述 二 set map list的区别 三. Collections类和Collection接口 四. List接口,有序可重复的集合 五. Set接口,代表无序,不可重复的集合 六. Map接 ...
- angularjs探秘<三> 控制器controller及angular项目结构
先来看一个例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&quo ...
- 硬盘读取不了-->>完美解决
说明:电脑装了两个硬盘,一个固态一个机械,装完系统之后读取不到机械硬盘的数据,网上很多人都说格式化之后分盘,但是!!!里面的数据咋办?千万别自己倒腾转换格式什么的,一不小心数据真的丢了,那就再也找不回 ...
- mysql 5.6 解压缩版安装教程
MySQL 5.6 for Windows 解压缩版配置安装 听语音 | 浏览:68011 | 更新:2014-03-05 12:28 | 标签:mysql 1 2 3 4 5 6 7 分步阅读 My ...
- django之模板系统 --》内容(filter过滤器、tags标签【for、if、with】、母板以及继承、crf_token、注释、组件、静态文件【load static】、get_static_prefix、自定义标签和tag)
常用: Django模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作. 变量 {{ 变量名 }} 变量名由字母数字和下 ...