PHP 分布式集群中session共享問題以及session有效期的設置

一、Session的原理

以下以默認情況舉例:

session_start();之后,會生成一個唯一的session_id,每一個用戶對應唯一一個session_id,每一個session_id對應服務器端的一個session文件。這個session文件存儲著當前session_id的信息,比如下面,就存儲了name和age的鍵值。

?

1、設置Session存儲的引擎(本地服務器的文件還是redis等),【php.ini 文件】

[Session]session.save_handler = filessession.save_path = /data/SessionLogs

?

2、默認情況下的Session的使用?

<?php
/*** session的使用* 默認情況(不更改session.save_handle參數時),是存儲在文件file中的* 默認情況下使用session的情況(用戶24分鐘內沒有刷新操作會過期)* 每個用戶對應唯一session_id,每一個session_id對應服務器中存儲的一個session文件,這個文件中存儲了當前session_id的信息,比如下面,就存儲了name和age的鍵值*/
session_start();
echo session_id();
echo "<br>";
$_SESSION['age'] = 26;
$_SESSION['name'] = 'xiaobudiu';
var_dump($_SESSION);

?

3、在服務器中存儲的形式是這樣的

?

?

二、使用Redis存儲Session

在網站訪問量較大時,我們通常會做集群(比如nginx負載均衡等),這時,如何解決session會話的共享問題。

(1)使用ip_hash或者自定義key做負載均衡輪詢策略是一個辦法,但由于有時候用戶可能走代理,所以這個方法其實并不是那么完美。

(2)另一個解決session共享問題的方法就是使用redis或者memcache緩存數據庫去存儲session,進而實現session共享問題。

?

1、設置php.ini 文件中的session.save_handle 和session.save_path

session.save_handler = Redissession.save_path = "tcp://localhost:6379"

注1:如果連接的是遠程redis,需要將localhost換成對應的遠程ip地址。像這樣,

session.save_handler = Redissession.save_path =  "tcp://47.94.203.119:6379"

注2:如果為redis已經添加了auth權限(requirpass),session.save_path項則應該這樣寫

session.save_handler = Redissession.save_path =  "tcp://47.94.203.119:6379?persistent=1&database=10&auth=myredisG506"

?

2、使用redis存儲session信息

<?php
/*** 將session存儲在redis中*/
session_start();
echo session_id();
echo "<br>";
$_SESSION['age'] = 26;
$_SESSION['name'] = 'xiaobudiu';
$_SESSION['sex'] = 'man';
var_dump($_SESSION);

在redis上是以這樣的形式進行存儲的

?

注:

搭建nginx集群:?https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80862272

搭建mysql主從復制架構:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/81086243

搭建redis集群:?https://blog.csdn.net/m_nanle_xiaobudiu/article/details/81004557

?

?

三、使用Redis存儲Session,并設置Session會話存活時間以及Session中某一元素存活時間

?

封裝session類 b.php

<?php/*** session控制類**/class Session
{function __construct($lifetime = 3600){//初始化設置session會話存活時間ini_set('session.gc_maxlifetime',$lifetime);}/*** 設置當前會話session的key-value* @param String $name   session name* @param Mixed  $data   session data* @param Int    $expire 有效時間(秒)*/function set($name, $data, $expire = 600){$session_data = array();$session_data['data'] = $data;$session_data['expire'] = time()+$expire;$_SESSION[$name] = $session_data;}/*** 讀取當前會話session中的key-value* @param  String $name  session name* @return Mixed*/function get($name){if(isset($_SESSION[$name])) {if($_SESSION[$name]['expire'] > time()) {return $_SESSION[$name]['data'];}else{self::clear($name);}}return false;}/*** 清除當前session會話中的某一key-value* @param  String  $name  session name*/function clear($name){unset($_SESSION[$name]);}/*** 刪除當前session_id對應的session文件(清空當前session會話存儲)*/function destroy(){session_destroy();}}

session類的使用:d.php

<?phprequire_once 'b.php';session_start();$session = new Session();
$session->set('wan','kkkk',1966);$session->set('name','xiaobudiu');
$session->set('age',26);
$session->set('sex','man');//輸出當前會話的session存儲數據
var_dump($_SESSION);//unset掉某一個session屬性
//$session->clear('name');//刪除當前session_id對應session文件
//$session->destroy();
//echo $session->get('sex');

?

redis中顯示:

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282223.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282223.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[SDOI2009]Bill的挑戰——全網唯一 一篇容斥題解

全網唯一一篇容斥題解 Description Solution 看到這個題&#xff0c;大部分人想的是狀壓dp 但是我是個蒟蒻沒想到&#xff0c;就用容斥切掉了。 并且復雜度比一般狀壓低&#xff0c; &#xff08;其實這個容斥的算法&#xff0c;提出來源于ywy_c_asm&#xff09; &#xff08;然…

[NOIP2015提高組]運輸計劃

題目&#xff1a;BZOJ4326、洛谷P2680、Vijos P1983、UOJ#150、codevs4632、codevs5440。 題目大意&#xff1a;有一棵帶權樹&#xff0c;有一些運輸計劃&#xff0c;第i個運輸計劃從ai到bi&#xff0c;耗時為ai到bi的距離&#xff0c;所有運輸計劃一起開始。現在可以把一條邊權…

對象存儲OSS服務

一、oss是什么 阿里云對象存儲服務&#xff08;Object Storage Service&#xff0c;簡稱OSS&#xff09;為您提供基于網絡的數據存取服務。使用OSS&#xff0c;您可以通過網絡隨時存儲和調用包括文本、圖片、音頻和視頻等在內的各種非結構化數據文件。 阿里云OSS將數據文件以…

《Access 2007開發指南(修訂版)》一一1.5 什么是數據庫對象

本節書摘來自異步社區出版社《Access 2007開發指南(修訂版)》一書中的第1章&#xff0c;第1.5節&#xff0c;作者&#xff1a; 【美】Alison Balter&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.5 什么是數據庫對象 Access 2007開發指南(修訂版)正如前…

ETL工具kettle的組件--生成記錄

今天介紹下kettle的一個比較實用的組件——生成記錄&#xff1b;當我們想將一部分文本數據變成數據行&#xff0c;每個字段作為一個數據行的一個列&#xff0c;那么我們可以利用這個組件&#xff1b;它的位置在雙擊點開根據自己的實際需要進行設置當設置后&#xff0c;可以點擊…

Linux學習筆記一

linux  kernel lib module shell tools ls -la&#xff1a; 顯示所有文件包括隱藏文件  cat /proc/cpuinfo&#xff1a; 顯示cpu信息 man man  /string&#xff1a; 向上搜索string字符串 繼續按下小寫n向上搜索  ?string&#xff1a; 向下搜索string字符串 繼續按下大…

PHP中路由和rewrite的使用

一、場景介紹&#xff1a; 1、簡化url地址&#xff0c;方便大家記憶 2、有利于搜索引擎優化 3、安全&#xff08;讓用戶看不出網站的目錄結構&#xff09; 舉例&#xff1a;比如我這里將main控制器中的bb方法路由到kk&#xff0c;這樣&#xff0c;我們a標簽請求跳轉到cp.xi…

《NoSQL權威指南》導讀

引言 NoSQL權威指南“沒有什么會比引入新秩序更難&#xff0c;因為創新者必須要面對那些在舊環境中已經做得很好的對手&#xff0c;以及那些在新環境中做得很好的冷漠者。” ——Niccolo Machiavelli [1] 在過去的幾十年&#xff0c;我已經通過Elsevier/Morgan Kaufmann出版社出…

zookeeper的單實例和偽集群部署

原文鏈接: http://gudaoyufu.com/?p1395 zookeeper工作方式 ZooKeeper 是一個開源的分布式協調服務&#xff0c;由雅虎創建&#xff0c;是 Google Chubby 的開源實現。 分布式應用程序可以基于 ZooKeeper 實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協 調/通知、集群管…

PHP開發常見功能實現流程

一、pc端網站登錄 1、獲取并過濾用戶提交的用戶名和密碼以及驗證碼 2、驗證用戶提交驗證碼和session中的驗證碼是否一致 3、驗證用戶名是否存在 4、根據用戶名獲取密碼&#xff0c;并校驗密碼是否一致 5、密碼一致&#xff0c;則登錄成功&#xff0c;跳轉到對應的首頁 圖示…

七牛直播云服務技術揭秘

以下根據七牛云首席布道師何李石現場演講內容整理。 直播模型及其實現 一個通用的直播模型一般包括三個模塊&#xff1a;主播方、服務器端和播放端。 首先是主播方&#xff0c;它是產生視頻流的源頭&#xff0c;由一系列流程組成&#xff1a; 第一&#xff0c;通過一定的設備來…

golang 標準庫間依賴的可視化展示

簡介 國慶看完 << Go 語言圣經 >>,總想做點什么,來加深下印象.以可視化的方式展示 golang 標準庫之間的依賴,可能是一個比較好的切入點.做之前,簡單搜了下相關的內容,網上也要討論,但是沒有發現直接能拿過來用的.標準庫之間,是必然存在依賴關系的,不同庫被依賴的程…

Amazon Alexa 新里程碑: 50000 個功能、 20000 種設備、 3500 個品牌

幾個月過去&#xff0c;Alexa的設備連接量、活躍度等各項數據又攀升了。昨日&#xff0c;亞馬遜智慧家庭副總裁DanielRausch在IFA大會上公布了Alexa的各項數據&#xff1a;全球范圍內&#xff0c;Alexa已經擁有50000個功能&#xff0c;與20000種設備相容&#xff0c;并與超過35…

C# 計算耗時的三種方法

概述計算一段程序的耗時是我們在編程中很常見的用法&#xff0c;那這節內容就通過實例的方式來演示幾種常用的統計耗時的方法.方法一&#xff1a;stopwatchstatic void Main(string[] args){Stopwatch sw new Stopwatch();sw.Start();Thread.Sleep(999);sw.Stop();Console.Wri…

《HTML5 2D游戲編程核心技術》——第1章,第1.3節特別功能

本節書摘來自華章出版社《HTML5 2D游戲編程核心技術》一書中的第1章&#xff0c;第1.3節特別功能&#xff0c;作者&#xff3b;美&#xff3d; 戴維吉爾里&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 1.3 特別功能 Snail Bait游戲有3個特別的功能&a…

XunSearch的安裝和加入服務器開機腳本以及將目錄寫入系統變量

一、安裝xunserach 1、cd ~ 2、wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 #下載最新xunsearch包 3、tar -xjf xunsearch-full-latest.tar.bz2 #解壓xunsearch包 4、cd xunsearch-full-1.4.11/ #進入xunsearch包目錄 5、sh setup.sh #執…

dubbo源碼解析-zookeeper創建節點

前言 在之前dubbo源碼解析-本地暴露中的前言部分提到了兩道高頻的面試題,其中一道dubbo中zookeeper做注冊中心,如果注冊中心集群都掛掉,那發布者和訂閱者還能通信嗎?在上周的dubbo源碼解析-zookeeper連接中已經講到,這周解析的是另一道,即服務提供者能實現失效踢出是根據什么原…

配置mysql為主主復制步驟

mysql版本&#xff1a;mysql-5.6.24-solaris10-sparc-64bit.tar 操作系統&#xff1a;solaris 11g u10 操作用戶&#xff1a;使用非root進行操作安裝&#xff0c;a路服務器ip地址為192.168.1.1 b路ip地址為192.168.1.2&#xff08;應改為實際ip地址&#xff09; 1&#xff0c;安…

XunSearch的使用

一、項目的配置文件 1、要想使用xunsearch&#xff0c;首先需要進行配置文件的配置。 默認目錄在app下&#xff0c;如下面的結構&#xff0c;每一個搜索項目都需要有一個ini文件進行相應的配置。 舉例&#xff1a; project.name novel project.default_charset utf-8 serv…

《VMware vSphere設計(原書第2版)》——1.1 什么是設計

本節書摘來自華章出版社《VMware vSphere設計&#xff08;原書第2版&#xff09;》一 書中的第1章&#xff0c;第1.1節&#xff0c;作者&#xff1a;[美] 福布斯格思里&#xff08;Forbes Guthrie&#xff09;斯科特羅威&#xff08;Scott Lowe&#xff09;肯德里克科爾曼&…