Yii在Web分布式下将Session存储到Memcached

当网站的访问越来越大的时候一台机器无法支持迸发,或都是为了做到去单点,都需要在后端搭建一个集群来处理用户的请求,由于传统的PHP Session是文件级的存储,那么如果一个用户在第一次登录的时候这个Session文件存在 A 服务器上,而第二次的时候被分到了B 服务器上,则又认为他没有登录了(当然配置好负载均衡的是可以让同一个用户永远在同一台机器上的,这个的可以略过。。。),所以我们需要将它存在一个别的地方,我选的是Memcached,存在这里面,当然后期可能会选择Redis因为它在取值方面可以更精确,省内网带宽。

在Yii里面我想达到将Session信息存储到Memcached里面只需要稍做配置即可,我当前的Yii版本为yii-1.1.13.e9e4a0

'session' => array(
        'class' => 'CCacheHttpSession',
        'autoStart' => true,
        'cacheID' => 'sessionCache', // we only use the sessionCache to store the session
        'cookieMode' => 'only',
        'timeout' => 1400,
),
'sessionCache' => array(
        'class' => 'system.caching.CMemCache',
        'servers' => array(
                array(
                        'host' => '192.168.10.193',
                        'port' => 11211,
                        'weight' => 6
                ),
                array(
                        'host' => '192.168.10.226',
                        'port' => 11211,
                        'weight' => 3
                ),
                array(
                        'host' => '192.168.10.228',
                        'port' => 11211,
                        'weight' => 2
                ),
        ),
),

测试一下登录没有问题,然后非常好奇,它真的就存入到Memcached里面了吗?我们如何来验证一下呢?

为了省去新建一个Controller所以我就直接写一个action到SiteController里面去了。

public function actionTestSessionWithMemcached(){

        /*
         * 得到sessionID号
         * 计算出来存在memcached的key值是多少.
         */
        $sessionId = Yii::app()->session->sessionID;
        echo "key:", $key = CCacheHttpSession::CACHE_KEY_PREFIX.$sessionId;

        /**
         * 这相当于是直接使用Memcached 连接,和session没有任何挂钩,
         * 我们来看一下session的数据是否真的就存在了memcached里边。
         * 通过计算出来的key直接用 get命令获取然后将数据打印出来就能看到值了。
         * 测试的时候先登录噢,别不登录就开始测试估计会获取不到值,以为有问题呢!
         */
        $mem =  Yii::app()->sessionCache;
        $data =$mem->get($key);
        var_dump($data);
}
时间: 2024-10-18 07:02:16

Yii在Web分布式下将Session存储到Memcached的相关文章

分布式集群下的Session存储方式窥探

传统的应用服务器,自身实现的session管理是大多是基于单机的,对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同的服务器之间跳转.那么,如何保持服务器之前的session同步呢? 分布式环境下,如果一次请求被负载均衡分配到了服务器A,如果按照一般的方式存储session,在A的本地会存储session,如果此次会话没有结束,下一次的请求被负载均衡到了B服务器(或者其他的非A服务器)那么上次的请求的session信息将不再存在.如果不做任何处理的话,用户将出

探讨Web开发中的Session存储与管理

我们都知道,由于HTTP协议是无状态的协议,一次浏览器和服务器的交互过程就是: 浏览器:你好吗? 服务器:很好! 这就是一次会话,对话完成后,这次会话就结束了,服务器端并不能记住这个人,下次再对话时,服务器端并不知道是上一次的这个人,所以服务端需要记录用户的状态时,就需要用某种机制来识别具体的用户,这个机制就是Session: 服务端如何识别特定的客户?这个时候需要使用Cookie: 每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端,用 Cookie 来实现Session跟踪

分布式下Session一致性问题

一.Session一致性问题 1.1 什么是Session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉web服务器请求是属于哪个会话的.如果遇到禁用cookie的情况,一般的做法就是把这个会话标识放到url的参数中. 1.2 什么是Session一致性问题 因为会话信

分布式下Session一致性架构举例

一.问题及方案 见这篇文章:分布式下Session一致性问题 二.分布式环境搭建: 系统环境 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [[email protected] ~]# 2.1 安装jdk # 下载jdk-8u141-linux-x64.tar.gz # 创建目录 mkdir -p /opt/java # 解压 tar -xzvf jdk-8u141-linu

分布式架构下,session共享有什么方案么?

分布式架构下,session共享有什么方案么? 会点代码的大叔 科技领域创作者 分布式架构下的session共享,也可以称作分布式session一致性:关于这个问题,和大家说一说解决方案(如果有其他的方案,可以留言讨论). session的作用 如果大家做过web应用开发的话,应该对session比较熟悉:服务器会为每个用户创建一个会话,存储用户的相关信息,以便在后面的请求中,可以够定位到同一个上下文. 例如用户在登录之后,再进行页面跳转的时候,存储在session中的信息会一直保持,如果用户还

一篇文章让你深透理解cookie和session,附带分布式WEB系统redis共享session方案

cookie和session有什么区别?这是一个很基础的知识点,大家可能都知道一个大概:cookie是存在客户端的,session是存储在服务端,cookie和session用来验证识别用户的登录状态,常见适用场景:用户登录,用户购物车数据等.偶然一次开发中遇到这些基础的知识,还要去baidu一下,今天就做一个完整的记录,便于以后查阅. 1.基础概念 cookie存储在客户端电脑中一般在:C:\Users\***\AppData\Local\Microsoft\Windows\Temporary

C# redis 分布式session存储

https://github.com/uliian/SessionExtentionStore 一个基于Redis的Session存储扩展方案,解决ASP.NET中Session的局限性和跨应用程序使用的局限性 9 commits 1 branch 0 releases 1 contributor C# 99.3% ASP 0.7% C#ASP branch: master SessionExtentionStore/ Merge branch 'master' of https://githu

分布式下session 的管理

MSM--memcached session manager是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用. 对于非黏性Session,memcached直接存储session. 除memcached外,还可以其他缓存组件如memcachedb, membase等. 特性 支持Tomcat6.Tomcat7 支持黏性.非黏性Session 无单一故障点

Web集群实现共享存储的架构演变及MogileFS

本篇博客从Web集群中亟需解决的大容量存储问题引入,分析了几类常用的共享存储架构,重点解析了分布式存储系统的原理及配置实现: =================================================================== 1 共享存储的架构演变 2 分布式存储系统 2.1 基础知识 2.2 分类 2.3 CAP理论 2.4 协议 3 MogileFS 3.1 特性 3.2 架构 3.3 组成 3.4 服务安装及启动 3.5 配置部署 3.6 配置前端代理N