zoukankan      html  css  js  c++  java
  • PHP之session与cookie

    1、session与cookie的关系  

      众所周知,session是存储在服务器端,cookie是存储在客户端,如果禁用了浏览器的cookie功能,很多时候(除非进行了特殊配置)服务器端就无法再读取session,这是为什么哪?

      服务器端区分session是通过session_id,这就需要客户端在发起http请求时,把session_id传送过来,如果浏览器如果开启了cookie,当session_id从服务器被返回时,就会被浏览器存储到cookie中,当再次发送http请求时,就会将cookie中的内容写入到http head中,如果禁用了cookie,服务器就会认为是一个新的客户端发起的请求,就会创建一个新的session会话。

      如果禁用了cookie,可以通过url参数的形式传输给服务器,如下:

    ini_set('session.use_cookies',0);
    ini_set('session.use_only_cookies',0);
    ini_set('session.use_trans_sid',1);
    

    2、session以文件存储时,分目录存放

      如果把session存放到一个目录下,当session文件特别多时,文件的搜索非常耗时,一般的解决方案是,自定义session handler,将session存储到内存中或者数据库中,第二个方案是,分多级目录存放session。第一种方案,如果存在内存中,需要安装memcache等内存管理工具。php本身支持session多级目录存放,只需要简单的修改一下配置文件即可,修改方法如下:

    session.save_path = “2;777;D:/session”;各个参数含义:2:创建二级目录 777:权限(可读、可写、可执行)D:/session session存放目录

    该配置就会将session分为两级目录,每个目录有16个子目录[0-f],不过好像PHP session不支持创建目录,你需要事先把那么些目录创建好 。

    *注意:二级目录php不会自动创建,需要ext/session下的工具生成,或者用代码生成,生成二级目录的程序如下:

    $str='0123456789abcdefghijklmnopqrstuvwxyz';     
    $len=strlen($str);     
    for($i=0;$i<$len;$i++){     
        for($j=0;$j<$len;$j++){     
            $dirname='d:/session/'.$str[$i].'/'.$str[$j];     
            if(!file_exists($dirname)){     
                mkdir($dirname,0777,true) && print('成功创建目录'.$dirname);     
            }     
        }     
    }
    

      

  • 相关阅读:
    ZOJ 2588 Burning Bridges
    POJ 1966 ZOJ 2182 Cable TV Network
    HDU 5348 MZL's endless loop
    HDU 5352 MZL's City
    Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
    ZOJ 1119 SPF
    HDU 3452 Bonsai
    HDU 1520 Anniversary party
    POJ 2239 Selecting Courses
    POJ 1144 Network
  • 原文地址:https://www.cnblogs.com/qbyyqhcz/p/5996071.html
Copyright © 2011-2022 走看看