回答編集履歴

1

補足

2017/07/08 01:19

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -7,6 +7,10 @@
7
7
 
8
8
 
9
9
  WebSocketでは,「ブラウザは開きっぱなしだけど何もしていない」という状態の場合にもハートビートと呼ばれる生存確認が行われるので,意図しない切断を回避することができます。逆に,切断されてしまった場合には `onError()` でそのことを検知できるはずです(未確認なので確認お願いします…)。「タイムアウト」を自前でやりくりするよりも,この仕組みに任せたほうが簡単だと思います。
10
+
11
+
12
+
13
+ ----
10
14
 
11
15
 
12
16
 
@@ -27,3 +31,21 @@
27
31
 
28
32
 
29
33
  - [ぼくのかんがえたさいきょうのsession_start - Qiita](http://qiita.com/mpyw/items/7f4772e4d4d360fc100c)
34
+
35
+
36
+
37
+ そして, **自分以外の誰かのセッション切れを検知する**,ここが少々面倒ですね。少々無駄はありますが,(ハートビートを含む)毎回のHTTPリクエストに対するレスポンスに,誰が生きているか・誰が死んだかの情報を含める必要があります。そのためには,`session_save_path()` で取得できるディレクトリ内に存在するすべてのセッションファイルに対して,
38
+
39
+
40
+
41
+ 1. `filemtime()` でファイルの最終更新時刻を取得し,現在と比べて期限切れかどうかを判定
42
+
43
+ 2. 期限切れであれば,該当者をタイムアウトリストに含める。セッションファイル名のみで個人の特定ができない場合は, `file_get_contents()` でファイルを取得して `session_decode()` でデコードし,必要な情報を取り出す。
44
+
45
+
46
+
47
+ という処理を行うことになると思います。
48
+
49
+
50
+
51
+ …正直面倒ですね。素直にWebSocket使ったほうがラクな気がします。