ホームページ  >  記事  >  バックエンド開発  >  PHP のセッション ID を使用してサーバー上のセッションを削除できますか?

PHP のセッション ID を使用してサーバー上のセッションを削除できますか?

WBOY
WBOYオリジナル
2016-06-23 13:47:031294ブラウズ

メンバーを追い出す機能を実装したいのですが、PHP でどのように実装すればよいでしょうか? 私のアイデアは、メンバーがログインするたびにセッション ID を記録することです。メンバーを追い出したい場合は、この ID を使用して行うことができます。サーバー上のセッションを削除するのですが、PHP でセッション ID を使用してセッションを削除できるかどうかわかりません。 ! !


ディスカッション(解決策)に返信

各メンバーのログインのセッション ID を記録できるため(明らかにデータベースに保存する必要があります)
その後、セッション ファイル モードをデータベース モードに変更するだけです。直接
キックしたい人の対応するレコードを削除するだけです

各メンバーログインのセッションIDを記録できるので(明らかにデータベースに保存する必要があります)
その後、セッションファイルモードをデータベースに変更するだけですさあ、
キックしたい場合は、対応するレコードを削除してください

モデレーター、もっと詳しく教えていただけますか? たとえば、キーはデータベースに保存されています。あなたはバックグラウンドにいます 特定のメンバーのセッションIDを取得した後、クライアント側でセッションを無効にしてメンバーを追い出すにはどうすればよいですか? モデレータが対応するレコードを削除するとはどういう意味ですか?しばらく PHP を使っていますが、面白いです
セッションはサーバーに保存されるため、削除するとクライアントのセッションを取得できなくなり、再度ログインする必要があります。

セッションはサーバーに保存されるため、削除するとクライアントのセッションを取得できなくなり、再度ログインする必要があります。

削除方法を知りたいです。確認したところ、この関数にはパラメータがありません。他のアカウントを削除する方法はありません。 SESSIONID を通して?
モデレーターの意味 セッション ID がデータベースに保存されているため、セッションはファイルではなくデータベースに保存され、操作に便利です。次に、これを達成するために、セッション ID に基づいて対応する DB レコードを削除します。


セッションがファイルに保存されている場合は、セッション ID を使用してファイルを削除することもできます。
セッション ファイルの保存場所は session.save_path で、phpinfo(); で見つけることができます

session_start();$_SESSION['test'] = 1;echo session_id();

上記のコードが実行されると、たとえば session_id() は iak6l6lurg6o63a00tsdi0a4m5 を返します
session.save_path では、sess_iak6l6lurg6o63a00tsdi0a4 が返されます生成されるm5 ファイル、これはセッション ファイルです。
次に、セッション ID iak6l6lurg6o63a00tsdi0a4m5 に基づいてファイルを削除します。

モデレーターは、セッションをファイルに保存するのではなく、db に保存することを意味します。セッション ID が db に保存されているため、操作に便利です。次に、これを達成するために、セッション ID に基づいて対応する DB レコードを削除します。


セッションがファイルに保存されている場合は、セッション ID を使用してファイルを削除することもできます。
セッション ファイルの保存場所は session.save_path で、phpinfo(); で見つけることができます

session_start();$_SESSION['test'] = 1;echo session_id();

上記のコードが実行されると、たとえば session_id() は iak6l6lurg6o63a00tsdi0a4m5 を返します
session.save_path では、sess_iak6l6lurg6o63a00tsdi0a4 が返されます生成されるm5 ファイル、これはセッション ファイルです。
次に、セッション ID iak6l6lurg6o63a00tsdi0a4m5 に基づいてファイルを削除します。

ありがとう、試してみる、ありがとう

各メンバーのログインのセッション ID を記録できるため (明らかにデータベースに保存する必要があります)

その後、セッション ファイル モードを次のように変更するだけです。データベース モードを直接実行します
好きな人をキックしたい場合は、対応するレコードを削除するだけです

モデレーターがこの方法に従って特定のユーザーのセッション ID を削除した場合、ユーザーはアクセスするたびにデータベースにクエリを実行する必要があります。セッション ID を確認するページがまだ存在しますか? 存在しない場合は、T によってオフラインになったことを意味します。

モデレーターは、セッションをファイルに保存するのではなく、db に保存することを意味します。セッション ID が db に保存されているため、操作に便利です。次に、これを達成するために、セッション ID に基づいて対応する DB レコードを削除します。


セッションがファイルに保存されている場合は、セッション ID を使用してファイルを削除することもできます。
セッション ファイルの保存場所は session.save_path で、phpinfo(); で見つけることができます

session_start();$_SESSION['test'] = 1;echo session_id();

上記のコードが実行されると、たとえば session_id() は iak6l6lurg6o63a00tsdi0a4m5 を返します
session.save_path では、sess_iak6l6lurg6o63a00tsdi0a4 が返されます生成されるm5 ファイル、これはセッション ファイルです。
次に、セッション ID iak6l6lurg6o63a00tsdi0a4m5 に基づいてファイルを削除します。

unlink ($myfile); を使用してファイルを削除すると、セッション ファイルを削除する権限がないというメッセージが表示されます。

session_set_save_handler がデータベース モードに転送されると、
コードを記述することなく、関連する操作が php によって自動的に完了します

ファイル モードのセッション一時ファイルは、ユーザー操作中にロックされます
session_id( は 2 つの間でのみ使用できます。ユーザー操作 ユーザーの sessionid);
session_write_close();
sessionid の一時ファイルを削除する

session_set_save_handler をデータベース モードに設定する

関連する操作は、コードを記述する必要はありません


ファイル モード セッション
session_id (user's sessionid);
session_write_close();
を使用して、sessionid の一時ファイルを削除できます。はい、間違いました。アクセスしているセッション ID ではなく、他のセッション ID のファイルを削除する必要があります。あなたが言ったこと
session_set_save_handler がデータベース モードに設定された後。 、関連する操作は PHP によって自動的に完了します。これはどういう意味ですか? ユーザーを追い出したい場合は、データベース内のユーザーのセッション ID 値を空に設定します。キックされたユーザーは他のページにアクセスし、自分のセッション ID を照会します。セッション ID が空の場合は、T によって削除されます。私の現在の理解はこれです。正しいかどうかはわかりませんが、モデレータは次のようになりますか?アドバイスをいただければ幸いです、ありがとうございます! ! !

そうです、sessionid に該当するレコードが無い場合は、再度ログインする必要があります



そうです、sessionid に該当するレコードが無い場合は、再度ログインする必要があります

モデレーター様、ご返信ありがとうございます。投稿できます

そうです、sessionidに対応するレコードがないので、再度ログインする必要があります


モデレータが再度質問して申し訳ありませんが、このような php ファイルの使用方法を教えてください
3db0ab95247109461f9c14dc25f3e1fedb = &$db; '); //セッションファイルの保存方法、これは必須です! Php.ini ファイルで設定されていない場合
session_set_save_handler(
array(&$this, 'open'), //session_start() の実行時に実行
array(&$this, 'close'), // スクリプト内で実行 実行session_write_close() または session_destroy() が完了または呼び出されたとき、つまり、すべてのセッション操作が完了した後に実行されます
array(&$this, 'read'), //session_start() が実行されると実行されます。現在のセッション データを読み取ります
array(&$this, 'write'), //スクリプトが終了し、session_write_close() が SESSION データの送信を強制するために使用されるときにこのメソッドが実行されます
array(&$this, 'destroy' ), // session_destroy() 実行時に
array(&$this, 'gc') を実行 // 実行確率は session.gc_probability と session.gc_divisor の値によって決まります タイミングは open 後です。 read、session_start は open、read、gc を実行します
);
session_start(); //セッションを開くには、session_set_save_handler の後に実行する必要があります
関数 unserializes($data_value) {
$vars = preg_split(
'/([a-zA-Z_x7f -xff][a-zA-Z0-9_x7f-xff]*)|/',
$data_value, -1, PREG_SPLIT_NO_EMPTY |
PREG_SPLIT_DELIM_CAPTURE
); i = 0; isset($vars[$i] ); $i++) {
$result[$vars[$i++]] = unserialize($vars[$i]) }
$result を返します。関数 open($path, $name) {
return true;
}
function close() {
$this->gc($this->lasttime);
return true;
関数 read($SessionKey) ){
$sql = "SELECT uid FROM セッション WHERE session_id = '".$SessionKey."' 制限 1";
$query =$this->db->query($sql); =$this->db->fetch_array( $query)){
return $row['uid'];
}else{
return "";
}
}
function write($SessionKey,$VArray) {
require_once(MRoot.DIR_WS_CLASSES .'db_mysql_class.php ');
$db1=new DbCom();
// データベースに接続します...今すぐ
$db1->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) , DB_DATABASE);
$db1->query( "set names utf8");
$this->db=$db1;
$data=$this-> unserializes ($VArray);
$sql0 = "セッション WHERE から uid = '".$SessionKey."' 制限 1"; ($this->db->num_rows( $query0)e0322d09bd385e1d7e40755b12a58accdb->query("insert into `sessions` set `session_id` = '$SessionKey',uid='".$data['webid']."',last_visit='".time() ."'");
}
return true;
}else{
/*$sql = "`セッション` セットを更新します
if(isset($data['webid'])){
$sql .= "uid = '".$data['webid' ]."', " ;
}
$sql.="`last_visit` = null " . "where `session_id` = '$SessionKey'";$this->db->query($sql); */
return true; }
}
function destroy($SessionKey) {
$this->db->query("セッションから削除` where `session_id` = '$SessionKey'");
return true;
}
function gc($lifetime) {
$this->db->query("delete from `sessions` where unix_timestamp(now( )) -`last_visit` > '".$this->lasttime."'");
return true;
}
}
?>
他のページでもこのテクノロジーを使用する必要があります。すべてのページで必要ですか?このクラスを導入してセッション クラス オブジェクトを作成するには、各セッションが失敗したときに destroy 関数と gc 関数が呼び出されますか?
多くの大人は、それをデータベースに保存するのが最善です

モデレーターはセッションを行うことを意味します。セッション ID が db に保存されているため、すべてのセッションを db に保存でき、操作に便利です。次に、これを達成するために、セッション ID に基づいて対応する DB レコードを削除します。

セッションがファイルに保存されている場合は、セッション ID を使用してファイルを削除することもできます。
セッションファイルの保存場所は session.save_path で、phpinfo(); で見つけることができます

session_start();$_SESSION['test'] = 1;echo session_id();

上記のコードが実行されると、たとえば session_id() は iak6l6lurg6o63a00tsdi0a4m5 を返します
session.save_ に sess_iak6l6lurg6o63a00tsdi0a4 が生成されますパスm5ファイル、これはセッション ファイルです。
次に、セッション ID iak6l6lurg6o63a00tsdi0a4m5 に基づいてファイルを削除します。

unlink ($myfile); を使用してファイルを削除すると、セッション ファイルを削除する権限がないというメッセージが表示されます。

テストしたところ、動作しました。使用しているセッション ファイルは削除されましたか?もちろん、それは機能しません


モデレーターは、セッションをファイルに保存するのではなく、データベースに保存することを意味します。セッション ID はデータベースに保存されているため、セッションをデータベースに保存できます。操作に便利です。次に、これを達成するために、セッション ID に基づいて対応する DB レコードを削除します。

セッションがファイルに保存されている場合は、セッション ID を使用してファイルを削除することもできます。
セッション ファイルの保存場所は session.save_path で、phpinfo(); で見つけることができます

session_start();$_SESSION['test'] = 1;echo session_id();

上記のコードが実行されると、たとえば session_id() は iak6l6lurg6o63a00tsdi0a4m5 を返します
session.save_path では、sess_iak6l6lurg6o63a00tsdi0a4 が返されます生成されるm5 ファイル、これはセッション ファイルです。
次に、セッション ID iak6l6lurg6o63a00tsdi0a4m5 に基づいてファイルを削除します。

unlink ($myfile); を使用してファイルを削除すると、セッション ファイルを削除する権限がないというメッセージが表示されます。

テストしたところ、動作しました。使用しているセッション ファイルは削除されましたか?もちろん、それは機能しません
確かに、私が使用していたものを削除しましたが、それが機能しなかったのも不思議ではありません。session_set_save_handlerメソッドが最適であるはずです。試してみましょう

session_set_save_handlerが入ったら。データベース モード

、関連する操作は php によって自動的に完了します。コードを記述する必要はありません。
ファイル モードのセッション一時ファイルは、ユーザー操作中にロックされます。
session_id (ユーザーの sessionid); のみを使用できます。
session_write_close();
2 つのユーザー操作間のセッション ID を削除します。
f2e2b6101ba3e6497e1c25d927f4c173 '60'";
$result = mysql_query($sql);
if ($result == true) {
echo $sql;
true を返します。

} else {
echo "エラー";
false を返します。

}

}

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
@ini_set('session.gc_probability', 1);
@ini_set('session.gc_divisor', 2);
@ini_set('session.gc_maxlifetime', 60);
session_start();

?>//文件名session_user_start.php
版主求指点一下,我書了2个页面测试,
1.php
f204c46d677a291ef409c2e9df6e3e3d

另外一个
2.php

include 'session_user_start.php';
echo $_SESSION['test'];
?>
访问可能ですが、60 秒後に再び访问2.php発行现gc那个関数并不调用,请教一下怎么样能在セッション失效時候,访问2.php让GC这个関数数実行呢

gc の場合、crontab を書いて実装できます。
http://blog.csdn.net/fdipzone/article/details/7263361

gc 用の crontab を作成できます。
http://blog.csdn.net/fdipzone/article/details/7263361


gc が呼び出されましたが、導入された他のページに 'session_user_start.php' が含まれていることが判明しました
echo $_SESSION['test']; , 見つかりました 前のページで割り当てられた SESSION がインポートされたセッション ページに到達し、$_SESSION の値が空になっているのは不思議です

セッション データを読み取るためにセッション データを返す必要がある理由はわかりました。

静的配列とセッションを使用して、検証中にセッション データと配列データを同時に保存することは可能ですか。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。