[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请求处理和响应的代码的时 ...
随机推荐
- DevExpress的提示框
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- CF1139D Steps to One (莫比乌斯反演 期望dp)
\[ f[1] = 0 \] \[ f[i] = 1 + \frac{1}{m} \sum_{j = 1} ^ n f[gcd(i, j)] \ \ \ \ \ \ (i != 1) \] 然后发现后 ...
- BZOJ 3473: 字符串 (广义后缀自动机)
/* 广义后缀自动机, 每次加入维护 该right集合的set, 然后可以更新所有的parent,最终能够出现在k个串中right集合也就是set大小大于等于k的部分 这样的话就给了我们要跳的节点加了 ...
- lunix 项目部署 *****
linux基本管理命令 服务器上安装服务,python3.6(宿主机上的物理解释器)1.虚拟解释器virtualenv虚拟出多个干净.隔离的python解释器环境问题:管理上较为麻烦,需要找到venv ...
- MySQL关于sql_mode的修改(timestamp的默认值不正确)
timestamp的默认值不正确原因: MySQL5.7版本中有了一个STRICT mode(严格模式),而在此模式下默认是不允许设置日期的值为全0值的,所以想要解决这个问题,就需要修改sql_mod ...
- Call requires permission which may be rejected by user: code should explicitly check to see if permi
Call requires permission which may be rejected by user: code should explicitly check to see if permi ...
- python 读取bin文件
python读取bin文件并下发串口 # coding:utf-8import time, serialfrom struct import *import binascii file = ope ...
- 关于thinkphp3.1无法加载模块解决办法
关于thinkphp3.1无法加载模块解决办法 如果没有具体的哪个模块的名字 请注意PHP的版本问题
- linux poi生成excel demo调试附调用代码
1.下载poi-3.9-20121203.jar包 2.java code package com.userpackage; import java.io.FileOutputStream; impo ...
- 04.给linux用户添加sudo权限
linux给用户添加sudo权限: 有时候,linux下面运行sudo命令,会提示类似: xxxis not in the sudoers file. This incident will be r ...