PHP兑现多服务器session共享之memcache共享
PHP实现多服务器session共享之memcache共享
使用基于文件的Session存取瓶颈可能都是在磁盘IO操作上,所以对付小数据量的Session没有问题,但是如果碰到大数据量的Sesstion,那么可能无法胜任,现在利用Memcache来保存Session数据,直接通过内存的方式,效率自然能够提高不少
首先打开php.ini文件,找到session的部分:(分号后面的是注释)
[Session]
; Handler used to store/retrieve data.
session.save_handler = files ;
这个是session的方式,默认的files就可以了,代表用文件储存,
还有两种方式,user和memcache。
user方式指的是你自己(也就是 用户)定义session的句柄,用于session的存取等 ,这个可以把session扩展存到数据库里
memcache方式,需要你配置好memcache ,还要配置session.save_path。
用memcache来作PHP 的session.save_handler
ini_set("session.save_handler", "memcache"); ini_set("session.save_path", "tcp://127.0.0.1:11211,tcp://192.168.1.12:11211");
用memcached 来作PHP 的session.save_handler
ini_set("session.save_handler","memcached"); ini_set("session.save_path","127.0.0.1:11211");
PHP实现多服务器session共享之memcache共享
再自定义一套session处理机制,关于session的实现方法我就不再多讲,直接贴程序了。
<?php /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */ //=========================================== // 程序: Memcache-Based Session Class // 功能: 基于Memcache存储的 Session 功能类 // 作者: yejr // 网站: http://imysql.cn // 时间: 2007-01-05 //=========================================== /** * 文件: MemcacheSession.inc.php * 类名: MemcacheSession Class * 功能: 自主实现基于Memcache存储的 Session 功能 * 描述: 这个类就是实现Session的功能,基本上是通过 * 设置客户端的Cookie来保存SessionID, * 然后把用户的数据保存在服务器端,最后通过 * Cookie中的Session Id来确定一个数据是否是用户的, * 然后进行相应的数据操作 * * 本方式适合Memcache内存方式存储Session数据的方式, * 同时如果构建分布式的Memcache服务器, * 能够保存相当多缓存数据,并且适合用户量比较多并发比较大的情况 * * 注意: 本类必须要求PHP安装了Memcache扩展或者必须有Memcache的PHP API * 获取Memcache扩展请访问: http://pecl.php.net */ //设定 SESSION 有效时间,单位是 秒 define('SESS_LIFTTIME', 3600); //定义memcache配置信息 define('MEMCACHE_HOST', 'localhost'); define('MEMCACHE_PORT', '10000'); if (!defined('MemcacheSession')) { define('MemcacheSession', TRUE); class MemacheSession { // {{{ 类成员属性定义 static $mSessSavePath; static $mSessName; static $mMemcacheObj; // }}} // {{{ 初始化构造函数 /** * 构造函数 * * @param string $login_user 登录用户 * @param int $login_type 用户类型 * @param string $login_sess 登录Session值 * @return Esession */ public function __construct() { //我的memcache是以php模块的方式编译进去的,可以直接调用 //如果没有,就请自己包含 Memcache-client.php 文件 if (!class_exists('Memcache') || !function_exists('memcache_connect')) { die('Fatal Error:Can not load Memcache extension!'); } if (!empty(self::$mMemcacheObj) && is_object(self::$mMemcacheObj)) { return false; } self::$mMemcacheObj = new Memcache; if (!self::$mMemcacheObj->connect(MEMCACHE_HOST , MEMCACHE_PORT)) { die('Fatal Error: Can not connect to memcache host '. MEMCACHE_HOST .':'. MEMCACHE_PORT); } return TRUE; } // }}} /** {{{ sessOpen($pSavePath, $name) * * @param String $pSavePath * @param String $pSessName * * @return Bool TRUE/FALSE */ public function sessOpen($pSavePath = '', $pSessName = '') { self::$mSessSavePath = $pSavePath; self::$mSessName = $pSessName; return TRUE; } // }}} /** {{{ sessClose() * * @param NULL * * @return Bool TRUE/FALSE */ public function sessClose() { return TRUE; } // }}} /** {{{ sessRead($wSessId) * * @param String $wSessId * * @return Bool TRUE/FALSE */ public function sessRead($wSessId = '') { $wData = self::$mMemcacheObj->get($wSessId); //先读数据,如果没有,就初始化一个 if (!empty($wData)) { return $wData; } else { //初始化一条空记录 $ret = self::$mMemcacheObj->set($wSessId, '', 0, SESS_LIFTTIME); if (TRUE != $ret) { die("Fatal Error: Session ID $wSessId init failed!"); return FALSE; } return TRUE; } } // }}} /** {{{ sessWrite($wSessId, $wData) * * @param String $wSessId * @param String $wData * * @return Bool TRUE/FALSE */ public function sessWrite($wSessId = '', $wData = '') { $ret = self::$mMemcacheObj->replace($wSessId, $wData, 0, SESS_LIFTTIME); if (TRUE != $ret) { die("Fatal Error: SessionID $wSessId Save data failed!"); return FALSE; } return TRUE; } // }}} /** {{{ sessDestroy($wSessId) * * @param String $wSessId * * @return Bool TRUE/FALSE */ public function sessDestroy($wSessId = '') { self::sessWrite($wSessId); return FALSE; } // }}} /** {{{ sessGc() * * @param NULL * * @return Bool TRUE/FALSE */ public function sessGc() { //无需额外回收,memcache有自己的过期回收机制 return TRUE; } // }}} /** {{{ initSess() * * @param NULL * * @return Bool TRUE/FALSE */ public function initSess() { //不使用 GET/POST 变量方式 ini_set('session.use_trans_sid', 0); //设置垃圾回收最大生存时间 ini_set('session.gc_maxlifetime', SESS_LIFTTIME); //使用 COOKIE 保存 SESSION ID 的方式 ini_set('session.use_cookies', 1); ini_set('session.cookie_path', '/'); $domain = '.imysql.cn'; //多主机共享保存 SESSION ID 的 COOKIE ini_set('session.cookie_domain', $domain); //将 session.save_handler 设置为 user,而不是默认的 files session_module_name('user'); //定义 SESSION 各项操作所对应的方法名: session_set_save_handler( array('MemacheSession', 'sessOpen'), //对应于静态方法 My_Sess::open(),下同。 array('MemacheSession', 'sessClose'), array('MemacheSession', 'sessRead'), array('MemacheSession', 'sessWrite'), array('MemacheSession', 'sessDestroy'), array('MemacheSession', 'sessGc') ); session_start(); return TRUE; } // }}} }//end class }//end define $memSess = new MemacheSession; $memSess->initSess(); ?>
?然后,在项目程序的头文件中直接包含 MemacheSession.inc.php 即可,并且以前的程序不用做任何改动。
测试 创建一个session
<?php //set_session.php session_start(); if (!isset($_SESSION['admin'])) { $_SESSION['TEST'] = 'wan'; } print $_SESSION['admin']; print "/n"; print session_id(); ?>
用 sessionid 去 memcached 里查询一下
<?php //get_session.php $mem = new Memcache; $mem->connect("127.0.0.1", 11211); var_dump($mem->get('0935216dbc0d721d629f89efb89affa6')); ?>
备注:memcache PECL 未来版本中,可以直接设置 php.ini 来这定自己的 session.save_handler,大致如下:
session.save_handler = memcache session.save_path = "tcp://host:port?persistent=1&weight=2&timeout=2&retry_interval=15,tcp://host2:port2"


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











L'utilisation de return en langage C est la suivante : 1. Pour les fonctions dont le type de valeur de retour est void, vous pouvez utiliser l'instruction return pour terminer l'exécution de la fonction plus tôt. 2. Pour les fonctions dont le type de valeur de retour n'est pas void, la fonction de ; l'instruction return sert à terminer l'exécution de la fonction.Le résultat est renvoyé à l'appelant ;3. Terminer l'exécution de la fonction plus tôt que prévu.À l'intérieur de la fonction, nous pouvons utiliser l'instruction return pour terminer l'exécution de la fonction plus tôt. si la fonction ne renvoie pas de valeur.

L'échec de la session est généralement dû à l'expiration de la durée de vie de la session ou à l'arrêt du serveur. Les solutions : 1. Prolonger la durée de vie de la session ; 2. Utiliser le stockage persistant ; 3. Utiliser les cookies ; 4. Mettre à jour la session de manière asynchrone ; 5. Utiliser un middleware de gestion de session ;

Solution au problème inter-domaines de PHPSession Dans le développement de la séparation front-end et back-end, les requêtes inter-domaines sont devenues la norme. Lorsque nous traitons de problèmes interdomaines, nous impliquons généralement l'utilisation et la gestion de sessions. Cependant, en raison des restrictions de la politique d'origine du navigateur, les sessions ne peuvent pas être partagées par défaut entre les domaines. Afin de résoudre ce problème, nous devons utiliser certaines techniques et méthodes pour réaliser le partage de sessions entre domaines. 1. L'utilisation la plus courante des cookies pour partager des sessions entre domaines

Dans le développement Web, nous devons souvent utiliser une technologie de mise en cache pour améliorer les performances du site Web et la vitesse de réponse. Memcache est une technologie de mise en cache populaire qui peut mettre en cache n'importe quel type de données et prend en charge une simultanéité élevée et une haute disponibilité. Cet article explique comment utiliser Memcache dans le développement PHP et fournit des exemples de code spécifiques. 1. Installer Memcache Pour utiliser Memcache, nous devons d'abord installer l'extension Memcache sur le serveur. Dans le système d'exploitation CentOS, vous pouvez utiliser la commande suivante

Cookies JavaScript L'utilisation de cookies JavaScript constitue le moyen le plus efficace de mémoriser et de suivre les préférences, les achats, les commissions et autres informations. Informations nécessaires pour une meilleure expérience de visiteur ou des statistiques de site Web. PHPCookieCookies sont des fichiers texte stockés sur les ordinateurs clients et conservés à des fins de suivi. PHP prend en charge de manière transparente les cookies HTTP. Comment fonctionnent les cookies JavaScript ? Votre serveur envoie certaines données au navigateur de votre visiteur sous la forme d'un cookie. Les navigateurs peuvent accepter les cookies. S'il est présent, il sera stocké sur le disque dur du visiteur sous forme d'enregistrement en texte brut. Désormais, lorsqu'un visiteur atteint une autre page du site

Optimisation de la communication asynchrone entre PHPSession à travers les domaines et AJAX Avec le développement d'Internet, l'accès entre domaines et la communication asynchrone sont devenus des besoins courants dans le développement d'applications Web modernes. Cet article se concentrera sur la façon d'utiliser PHPSession pour obtenir un accès inter-domaines et fournira quelques méthodes d'optimisation pour améliorer l'efficacité de la communication asynchrone d'AJAX. 1. Le problème de l'accès inter-domaines Dans le développement Web, cela se produit lorsque le navigateur initie une requête HTTP à partir d'une page Web d'un nom de domaine puis renvoie les données de réponse appartenant à un autre nom de domaine.

Comment utiliser Memcache pour une écriture et des requêtes de données efficaces dans le développement PHP ? Avec le développement continu des applications Internet, les exigences en matière de performances du système sont de plus en plus élevées. Dans le développement PHP, afin d'améliorer les performances du système et la vitesse de réponse, nous utilisons souvent diverses technologies de mise en cache. L'une des technologies de mise en cache couramment utilisées est Memcache. Memcache est un système de mise en cache d'objets à mémoire distribuée hautes performances qui peut être utilisé pour mettre en cache les résultats des requêtes de base de données, les fragments de page, les données de session, etc. En stockant les données en mémoire

Dans le développement PHP, l'utilisation du système de mise en cache Memcache peut considérablement améliorer l'efficacité de la lecture et de l'écriture des données. Memcache est un système de mise en cache basé sur la mémoire qui peut mettre en cache les données en mémoire pour éviter les lectures et écritures fréquentes de la base de données. Cet article expliquera comment utiliser Memcache en PHP pour des opérations efficaces de lecture et d'écriture de données, et fournira des exemples de code spécifiques. 1. Installer et configurer Memcache Vous devez d'abord installer l'extension Memcache sur le serveur. peut passer
