目次
ディスカッション(解決策)に返信
ホームページ バックエンド開発 PHPチュートリアル PHP のセッション ID を使用してサーバー上のセッションを削除できますか?

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

Jun 23, 2016 pm 01:47 PM

メンバーを追い出す機能を実装したいのですが、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 ファイルの使用方法を教えてください
/*========================= ===ファイルの説明========================================
@filename: session .class.php
@description: データベースはオンライン ユーザー セッションを保存して、オンライン ユーザー機能を実装します。
@notice: 当サイトではログインに Cookie を使用しているため (有効時間は 1 時間)、セッションの有効期限は 1 時間です。
したがって、毎回更新して更新するのではなく、ユーザーがログインした時刻のみを記録します
データベース内のセッションレコードを削除するアクションは、ユーザーがタイムアウトしてこのファイルを実行するか、正常に終了したときに発生します (session_destory)
@データベース: データベース:セッション フィールド:sessionid(char32 )、uid(int10)、last_visit(int10)
============================ ========== =======================================
*/
クラス session {
private $db ;
private $lasttime=3600; // タイムアウト: 1 時間
function session(&$db) {
$this->db = &$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)<=0){
if (isset($data['webid']) && !empty($data['webid'])) {
$ this->db->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 を削除します。

$con = mysql_connect("127.0.0.1", "root" , "111111");

mysql_select_db("セッション");

function open($save_path, $session_name) {
return(true);
}

関数 close() {
return(true);
}

function read($id) {
if ($result = mysql_query("select * from session where id='$id'")) {

if ($row = mysql_fetch_array($result)) {
return $row["data"];
}
} else {
return "";
}
}

function write($id, $sess_data) {

$sql = "SELECT * FROM session WHERE id = '".$id."' limit 1";
$check=mysql_query($sql);
$total=mysql_num_rows($check);
$result = false;
if($total<=0){
$sql = "insert into `session` set `id` = '$id',data='".$sess_data."',last_visit='".time()。 "";
mysql_query($sql);
}else{
$sql = "update session set data='$sess_data', last_visit='".time()."' where id='$id'";
$result = mysql_query($sql);
}

if ($result==true) {
trueを返す;
} else {
return false;
}
}

function destroy($id) {

if ($result = mysql_query("delete * from session where id='$id'")) {
return true;
} else {
return false;
}
}

function gc($maxlifetime) {
$sql = "delete from `session` where unix_timestamp(now()) -`last_visit` > '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

include 'session_user_start.php';

$_SESSION['test'] ="ok la";

echo「初期化OK」;

?>

另外一个
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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles