设为首页 收藏本站
查看: 1710|回复: 0

[经验分享] session分别保存为文件,数据库和memcache中得做法

[复制链接]

尚未签到

发表于 2015-8-31 11:05:45 | 显示全部楼层 |阅读模式
  本文章不设计跨域或跨子域或跨服务器保存,其他文章写了。
  
  保存在
  1、文件
没啥好说的,默认就是文件,保存目录在php.ini里配置,
  2、数据库(此处可配置域名,只是限制于二级域名)
  做法步骤:
  1)session的handler原来是 files,现在改为user,表示设置为用户级别的handler了。自定义了。但是session_set_save_handler这个函数的几个参数分别是
  bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )
  所以我们可以写函数,也可以写类,在php中,如果是调用类中得函数,需要用array(类名,函数名)这样的格式作为参数
  2)再设置一些php.ini中得参数,方便我们在函数中调用,比如session.name原来叫PHPSESSID有点长,我们可以改为sid
  ----------------------------示例------------------------------------
  $hostname = "localhost";    $dbname = "test";    $username = "root";    $pw = "";    $pdo = new PDO ("mysql:host=$hostname;dbname=$dbname","$username","$pw");   
$pdo->query("set names 'utf8'");
//让pdo同学来帮忙操作数据库:
$session=new session($pdo);
  //将 session.save_handler 设置为 user,而不是默认的 files
session_module_name('user');//本想用int_set("session.save_handler","user"),不知道为啥不成功
session_set_save_handler(array($session,'open'),
array($session,'close'),
array($session,'read'),
array($session,'write'),
array($session,'destroy'),
array($session,'gc'));
  //接下来:
//设置色session id的名字
ini_set('session.name', 'sid');
//不使用 GET/POST 变量方式
ini_set('session.use_trans_sid', 0);
//设置垃圾回收最大生存时间
ini_set('session.gc_maxlifetime', 3600);
//使用 COOKIE 保存 SESSION ID 的方式
ini_set('session.use_cookies', 1);
ini_set('session.cookie_path', '/');
//多主机共享保存 SESSION ID 的 COOKIE,注意此处域名为一级域名
ini_set('session.cookie_domain', 'localhost');

//以上都是SESSION的设置,不明白的多搜索下手册
//最后在你需要的地方将SESSION启动:
session_start();
$_SESSION["name"]="zhang3";
echo session_id();
  
<?php
    class session{
    private $db;
    function __construct($db){
        $this->db=$db;
    }
    public function open($save_path,$session_name){
          return true;
    }
    public function close(){
        $this->db=null;
    return true;
    }
    public function read($sid){
        $rs=$this->db->query("select * from sessions where sid='".$sid."'");
        foreach ($rs as $row){
            return $row['value'];
        }
    return null;
    }
    public function write($sid,$value){
        if(is_null($oldvalue=$this->read($sid))){
            //insert
            $str = "insert into sessions (sid,expiry,value)values('".$sid."',".time().",'".$value."')";
            return $this->db->query($str);
        }else{
            //update
            return $this->db->query("update sessions set expiry=’".time()."‘,value=’".$value."‘ where sid=’".$sid."‘");
        }
    }
    public function destroy($sid){
        return $this->db->query("delete from sessions where sid=’".$sid."‘");
    }
    public function gc($max_life_time){
        return $this->db->query("delete from sessions where expiry+’.$max_life_time.’<’.time().");
    }
}
  3、memcache中
  我们也可以按照上面的做法,写为user,然后增添相应的方法!!不过php中已经带了memcache,我们就没有必要啦
  <?php
//ini_set("session.save_handler","memcache");
session_module_name("memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");
$mem = new Memcache;
$mem->connect("localhost", 11211); //这个端口是默认的,其实也可以通过360查看
$mem->set("key", "This is a test!", 0, 60);
$val = $mem->get("key");
session_start();
$_SESSION["name"] = "li4";
echo $mem->get(session_id());
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106736-1-1.html 上篇帖子: [转] memcache一致性哈希算法以及其PHP实现 下篇帖子: [原创]在Linux下面安装Memcache操作手册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表