---------------------------------------------------------------------------------------------------------

一. 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机制,配置与高级应用的更多相关文章

  1. Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  2. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  3. PHP中的SESSION机制

    [转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧.   c ...

  4. [转]Cookie/Session机制详解

    原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用 ...

  5. SESSION机制

    一:Session与Cookie Session:在服务器端创建并存放在服务器的内存中的,Session的内容存储是键值对的列表,格式:名称 | 类型:长度:值 Session的生命周期:在php.i ...

  6. .net学习之进程外Session的配置

    转载地址:http://www.cnblogs.com/rohelm/archive/2012/05/13/2498465.html 人人都知道怎么去使用session,但是初学者,尤其是自学的学生可 ...

  7. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  8. Session机制详解

    转自:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能 ...

  9. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

  10. node模拟http服务器session机制-我们到底能走多远系列(36)

    我们到底能走多远系列(36) 扯淡: 年关将至,总是会在一些时间节点上才感觉时光飞逝,在平时浑浑噩噩的岁月里都浪费掉了太多的宝贵.请珍惜! 主题:      我们在编写http请求处理和响应的代码的时 ...

随机推荐

  1. 提高modem的core dump级别

    zhangze@zhangze-OptiPlex-7040:~/e2_8939-E2-2104026-CTA/device/qcom/common$ git showcommit be2b5cb33a ...

  2. sbt 以及 IDEA sbt 插件安装配置教程(转)

    1. 在Windows中安装sbt 下载 官网: http://www.scala-sbt.org/ github: https://github.com/sbt/sbt/releases/downl ...

  3. 【Unix网络编程】chapter3套接字编程简介

    chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...

  4. 推荐7个GitHub上不错的Python机器学习项目

    1.Pylearn2 [Star:2633] Pylearn是一个让机器学习研究简单化的基于Theano的库程序. 2. Scikit-learn [Star:32449] Scikit-learn是 ...

  5. mint-ui 输入框按下按键执行查询

    环境:vue.mint-ui 功能:一个输入框,按下按键之后就执行某个功能. 截图:一个输入框 输入框html: <mt-search v-model="query" can ...

  6. IIS Express内存溢出错误

    IIS Express只是vs自带的一个简单版开发调试用的web服务器,所以本身貌似并不能容纳太多内存,有时候内存占用超过一定程度就会出错. 这时候可以试着发布到真正的IIS上查看一下,可能就不会出错 ...

  7. jQuery设置div的自适应布局

    一.HTML代码: <div class="ui-wraper" id="Wraper"> </div> 二.CSS代码: html { ...

  8. LeetCode 6. ZigZag Conversion & 字符串

    ZigZag Conversion 看了三遍题目才懂,都有点怀疑自己是不是够聪明... 就是排成这个样子啦,然后从左往右逐行读取返回. 这题看起来很简单,做起来,应该也很简单. 通过位置计算行数: P ...

  9. gentoo AR9285 BCM57780 安装驱动

    首先使用启动光盘启动, 然后 mount /dev/sda4 /mnt/gentoo 挂载硬盘 lspci -v 1>/mnt/gentoo/root/lspci_v.txt 输出信息到文件. ...

  10. 11.采集手机端app企查查上司公司数据(未成功)

    ---恢复内容开始--- 采集企查查手机端app数据: 1.首先手机端安装app并usb连接电脑端,fiddler监控手机请求数据对数据进行分析抓取. 手机端界面与fiddler界面参照: 2.对获取 ...