zoukankan      html  css  js  c++  java
  • Session的学习总结

    1. session的原理。

    《PHP核心技术与最佳实践》P299
    session通过一个称为PHPSESSIONID的cookie和服务器联系。session通过sessionID判断客户端用户的,即session文件的文件名。
    sessionID按照一定的算法生成,包含在HTTP Request里,通过保证唯一性和随机性来确保session的安全。如果没有设置session的生存周期,sessionID存在内存中,关闭浏览器后该ID会自动注销,重新请求该页面的时候会重新注册一个sessionID。
    如果客户端没有禁用cookie,cookie在启动session会话的时候会存储sessionID和session生存期。如果客户端禁用了cookie,所有的生存周期都是浏览器进程,只要关闭浏览器了,再次请求页面的时候又要重新注册session。

    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个sessionID,如果已包含一个sessionID则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用;如果客户端请求不包含sessionID,则为此客户端创建一个session并且生成一个与此session相关联的sessionID,这个sessionID将被在本次响应中返回给客户端保存。

    2. session的过期策略。

    session 其实就是基于时间的一种缓存,它有一个最近访问时间,用户每访问一次,session里面的最近访问时间就更新一次。如果当前时间减去最近访问时间大于三十分钟(这个时间可以设置),这个session就会被移除掉,进而失效。

    3. session的数据结构

    session目录保存路径在php.ini配置文件里面,可自行指定session的保存位置(设置完成后需要重启服务方可生效),如:

    session.save_path = "D:xampp	mp"
    

    可以用以下代码测试session目录路径是否设置成功:

    $session_path = session_save_path();  
    if (strpos($session_path, ";") !== FALSE) {  
        $session_path = substr($sessionpath, strpos($sessionpath, ";")+1);
    }
    //获取当前session的保存路径  
    echo $session_path;  
    

    要使用 session ,都需要初始化 session_start();

    <?php
    //1.初始化session
    session_start();
    //2.保存数据
    $_SESSION['name'] = "liulu";
    //session文件中可以保存double,inerger,bool,array,object;
    $_SESSION['age'] = 26;
    $_SESSION['gender'] = "female";
    $address = array("BeiJing","FunHill");
    $_SESSION['address'] = $address;
    //保存一个对象到session文件
    echo "success!";
    

    运行上述代码后,可以看到session目录里生成一个session文件,打开该文件,其内容为

    name|s:5:"liulu";age|i:26;gender|s:6:"female";address|a:2:{i:0;s:7:"BeiJing";i:1;s:7:"FunHill";}
    

    4. session怎么做到高可靠呢?假如一台机器挂了怎么办?

    对于访问量大的站点,较优的方法是用DataBase(普通数据库、内存表、APC等)存取session。MEMORY引擎采用内存表,所有数据都存储在内存,操作速度快,适用于session这样的数据。

    但在大流量的网站中,session入库的效率不高,且占据数据库的connection资源,因此可以使用Memcached、Redis等nosql数据库来实现高并发、大流量的session存储。

  • 相关阅读:
    socket使用大全
    UIImageView控件使用(转)
    多线程,socket,http,asihttpRequest,等总结集合
    ios 如何判断字符串含有中文字符?
    修改UISearchBar
    abc222_e Red and Blue Tree(树上差分+01背包)
    2020icpc上海部分题解
    abc215_e Chain Contestant(状压dp)
    bzoj3238 差异(后缀数组+单调栈)
    NCD2019部分题解
  • 原文地址:https://www.cnblogs.com/sunshineliulu/p/7361364.html
Copyright © 2011-2022 走看看