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

      

  • 相关阅读:
    [Java]去除html中的标签或者元素属性(正则表达式)
    一份非常完整的 MySQL 规范
    前端统计图 echarts 实现简单柱状图
    获取一个表中的字段总数(mysql) Navicat如何导出Excel格式表结构 获取某个库中的一个表中的所有字段和数据类型
    【学习笔记】splay入门(更新中)
    【题解】P1972 [SDOI2009]HH的项链
    【题解】P2024 [NOI2001]食物链
    【题解】P1291 百事世界杯之旅
    【题解】P2602 数字计数
    【题解】P2831 愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/qbyyqhcz/p/5996071.html
Copyright © 2011-2022 走看看