php里改写session到memcache里,并兑现跨顶级域名的限制(应用单例模式)
php里改写session到memcache里,并实现跨顶级域名的限制(应用单例模式)
这两天研究php跨顶级域名问题:终于做了一个勉强(说是勉强,是因为生成$_COOKIE["mzlid"]的值的方法不是完美的)的方案.
首先说一下思路:
session要实现跨顶级域名问题,得解决,程序能识别每一位用户,
在单个域名的时候,是通过sessionid来实现的,sessionid的值的生成原理,是根据客户端的IP,还有其它值,加上时间值,加上随机数,再通过一定规则,最后生成出来并保存在cookie里的。每次请求页面,都把这个值带入header里,这样服务器上的php页面就能识别出不同的用户了。
要跨域,那么这个Id值在访问几个顶级域名产生的值要保持一样。
在这里我的作法是:根据客户的IP,客户的一些其它环境值,生成一个值,并把它存入一个cookie里,那么当客人访问A网站的时间,这个值,生成了,接下来第一次B网站时,这个值没有,如果没有就根据前面的生成规则再生成一次。
那么两个网站在读取$_COOKIE["mzlid"]这个值时,同一个客户,得到的值就是一样的。
接下来我们把它存到memcache里,键名就以这个值为名,内容,以json化数据的形式存进去。
以后这个客人的session的值要增加,修改,删除,都去memcache里查以$_COOKIE["mzlid"]为键名的值,再把它json出来。就OK了。
跨多服务器特点就是利用memcache的集群功能实现.
下面是php操作memcache的session类。
只是省略了$_COOKIE["mzlid"]的生成。
<?php /** * 自定义的session方式,功能是把需要写成session的值存入memcache里,应用单例模式 * by jroam http://www.10np.com * * 用法: * $mss=MySession:init(); $mss->set("host","http://www.10np.com"); $mss->close(); */ class MySession{ public $memcache; public $seid; private static $instance;//存放实例化对像, private function __construct() { global $SYS_config; $this->memcache = memcache_connect($SYS_config["memcachedIP"], $SYS_config["memcacheddk"]); } //初始化 function init(){ if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } /** * k值 sessionk值 * $v 内容值 */ function set($k,$v){ $this->seid=($_COOKIE["mzlid"]); if($this->seid=="")return "无"; //获取已经存在的值 $a=memcache_get($this->memcache,$this->seid); if($a) $arr=json_decode($a,true); $arr[$k]=$v; $a=json_encode($arr); $f=memcache_set($this->memcache,$this->seid,$a,MEMCACHE_COMPRESSED,36000); } /** * k值 sessionk值 * $v 内容值 */ function get($k,$v){ $this->seid=($_COOKIE["mzlid"]); if($this->seid=="") return "元"; $a=memcache_get($this->memcache,$this->seid); $arr=json_decode($a,true); return ($arr[$k])?$arr[$k]:""; } /** * 删除一个值 * 如果$k值为空时,删除这个用户所有的session值 */ function del($k){ $this->seid=($_COOKIE["mzlid"]); if($this->seid=="") return ""; if($k==""){ memcache_delete($this->memcache,$this->seid); return; } $a=memcache_get($this->memcache,$this->seid); $arr=json_decode($a,true); unset($arr[$k]); memcache_set($this->memcache,$this->seid,json_encode($arr),MEMCACHE_COMPRESSED,36000); } /** * 关闭memcache的连接 */ function close(){ memcache_close($this->memcache); } // 阻止用户复制对象实例 public function __clone() { trigger_error('请不要复制对像.', E_USER_ERROR); } } ?>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在Web開發中,我們經常需要使用快取技術來提高網站的效能和回應速度。 Memcache是一種流行的快取技術,它可以快取任何資料類型、支援高並發和高可用性。本文將介紹如何使用PHP開發中的Memcache,並提供具體程式碼範例。一、安裝Memcache要使用Memcache,我們首先需要在伺服器上安裝Memcache擴充。在CentOS作業系統中,可以使用以下命令

在PHP開發中,使用Memcache快取系統可以大幅提高資料讀寫的效率。 Memcache是一種基於記憶體的快取系統,它可以將資料緩存在記憶體中,避免頻繁的讀寫資料庫。本文將介紹如何在PHP中使用Memcache進行高效率的資料讀寫操作,並提供具體的程式碼範例。一、安裝和設定Memcache首先,需要在伺服器上安裝Memcache擴充。可以透過

PHP開發中如何使用Memcache進行高效率的資料寫入與查詢?隨著網路應用的不斷發展,對於系統效能的要求越來越高。在PHP開發中,為了提高系統的效能和反應速度,我們經常使用各種快取技術。而其中一個常用的快取技術就是Memcache。 Memcache是一種高效能的分散式記憶體物件快取系統,可以用來快取資料庫查詢結果、頁面片段、會話資料等。透過將資料儲存在內存

Memcache快取技術在PHP中優化資料互動的實踐和思考在現代的Web應用中,資料互動是一個非常重要的問題,它沒有足夠的高效性,將會限制Web應用程式的擴展性和效能。為了加快資料互動速度,我們通常的做法是優化資料庫的設計、提高硬體的效能和增加伺服器容量。但是,這些方法都有一個共同的限制:它們會增加系統的成本。最近幾年,Memcache技術在解決這個問題上提

隨著網路的快速發展,越來越多的應用程式需要面對大量的並發請求,如何提高應用程式的並發處理能力成為開發者需要解決的問題。其中,利用Memcache快取技術進行並發優化成為了相對較受歡迎的方案。 Memcache是一種高效能的快取技術,適用於大型Web應用程式、資料庫和分散式系統。其特點是將資料儲存於記憶體中,以實現高速讀寫操作。在網路應用程式的資料存取過程中,

Memcache是一種開源的、分散式的快取技術。它透過將資料儲存在記憶體中,大大提高了資料的存取速度,從而提升了網站的效能和反應速度。在PHP專案中,Memcache快取技術也被廣泛應用,並且取得了很好的效果。本篇文章將深入探討Memcache快取技術在PHP專案的應用與實務。一、Memcache的原理和優勢Memcache是一種記憶體快取技術,它可以將數據

隨著Web應用程式的日益複雜,效能也成為了一個關鍵問題。在許多應用程式中,資料庫查詢是最耗費時間的操作之一。為了避免頻繁地從資料庫中讀取數據,可以使用快取系統,將經常讀取的數據儲存在記憶體中,以便快速的存取。在PHP開發中,使用Memcached進行分散式快取是一個極為常見的做法,在本文中我們將介紹如何使用Memcached進行分散式快取。什麼是Memca

如何使用Memcache優化你的PHP應用中的資料儲存操作?在網路應用開發中,資料儲存是一個至關重要的環節。而在PHP應用中,Memcache作為一種記憶體快取系統,可以有效提升資料儲存和讀取操作的效率。本文將介紹如何使用Memcache優化PHP應用中的資料儲存操作,並附上具體的程式碼範例。第一步:安裝Memcache擴充首先,你需要在PHP環境中安裝Me
