• 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);     
            }     
        }     
    }
    

      

  • 相关阅读:
    客户端入手分析异步更新机制
    前面PRM实例所使用到的MasterPage
    FCKeditor.Net_2.2安全修正版
    PRM–endRequest事件
    PageRequestManager类
    客户端访问PageMethod
    使用ASPJPEG组件生成缩略图
    使用js实现广告切换
    动态添加UpdatePannel
    MSMQ(Microsoft Message Queue,微软消息队列) Asp.Net 简单示例
  • 原文地址:https://www.cnblogs.com/qbyyqhcz/p/5996071.html
Copyright © 2020-2023  润新知