是这样的,我现在打算用memcache
来存储信息
这样实现的write()
方法
<code>class MemcacheHandler implements \SessionHandlerInterface { ... public function write($session_id, $session_data) { $mc = self::getMc(); file_put_contents('/tmp/sess_log', $session_id.'-'.$session_data.'-'.self::$config['expire'].PHP_EOL, FILE_APPEND); # 测试用 return $mc->set($session_id, $session_data, self::$config['expire']); } ... } </code>
然后
<code>php</code><code>session_set_save_handler(new MemcacheHandler(), true); #自己定义session处理 session_start(); # 开启session $_SESSION['uid'] = 123456; #写入数据 </code>
然后问题来了,分析/tmp/sess_log
文件看出,将session数据写入memcache时,只写入了一次,当刷新页面的时候,并没有再次写入。这样的话,假设我用session来判断用户是否是登陆状态,那岂不是超过定义的时间之后,就自动掉线了?
如果我改成$_SESSION['uid'] = 78965;
,这时却会再次写入。
google了下,没有找到答案,求各位大神解答一下,多谢了
回复内容:
是这样的,我现在打算用memcache
来存储信息
这样实现的write()
方法
<code>class MemcacheHandler implements \SessionHandlerInterface { ... public function write($session_id, $session_data) { $mc = self::getMc(); file_put_contents('/tmp/sess_log', $session_id.'-'.$session_data.'-'.self::$config['expire'].PHP_EOL, FILE_APPEND); # 测试用 return $mc->set($session_id, $session_data, self::$config['expire']); } ... } </code>
然后
<code>php</code><code>session_set_save_handler(new MemcacheHandler(), true); #自己定义session处理 session_start(); # 开启session $_SESSION['uid'] = 123456; #写入数据 </code>
然后问题来了,分析/tmp/sess_log
文件看出,将session数据写入memcache时,只写入了一次,当刷新页面的时候,并没有再次写入。这样的话,假设我用session来判断用户是否是登陆状态,那岂不是超过定义的时间之后,就自动掉线了?
如果我改成$_SESSION['uid'] = 78965;
,这时却会再次写入。
google了下,没有找到答案,求各位大神解答一下,多谢了
不用自己实现memcache session handler. 你装上php memcache扩展,在php.ini里配置下就能使用memcache 存session。
session存储在memcache不是配置一下的事情么?怎么变得这么麻烦了。
php使用 memcache 来存储 session
1:改时间戳试下
http://php.net/manual/zh/memcache.set.php
2:session不推介试用memcache存储 ,具体文章自己搜下 参见: memcache 作者 session 关键字
并不是你赋值了就一定会触发写入,php应该在写入之前会判断写入被写入的值是否改变了,这也是很常见的降低写入负载的一种思路,你虽然在不停的赋值,但其实都是同一个值,所以实际session内容并没有改变
你这是PHP5.4以上的写法,我的是PHP5.2的,把session写入memcache,我的是每次都写入,已经测试了,不知道是不是版本的问题,你在write方法里在写入前打印点东西看看执行了吗?
memcache用LRU的,不推荐用它来存session
ini_set('session.save_handler', 'memcached');
或者你装了php memcache扩展
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $memcachePath);
$memcachePath 是一个字符串,可以拼接起多个memcached服务
看一下手册,有说明。
按照你现在的写法确实会这样,建议你在session的数据里面加个过期时间,自己续吧。
ini_set('session.save_handler', 'memcached');使用这种方式有个问题,session的GC是系统控制的,你没办法在逻辑里面控制
下面是续session时长的思路
function write(){
$md->set("xxx",array("uid"=>"xxxx","expire_time"=>自己逻辑的过期时间),memcache数据过期时间 );
}
function read(){
$data = $md->get("xxxx");
if($data){
//sesion存在
$diffTime = time() - $data["expire_time"];
if($diffTime > 阀值){
//续session的时间
}
}
}
楼主提到
当刷新页面的时候,并没有再次写入
当session没有过期的时候,session不会重新写。要看你的session配置的参数是怎么样的,是不是刷新也没不会导致过期呢,(很大可能是). 试试关掉并重新打开浏览器。
用print_r(session_get_params()) 看看结果

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック









