ページ間でのデータベース セッションの読み取りに失敗しました
気が狂いそうになる。 。 3日が経ちました。 。一つの問題は、それが解決できないことです。誰に聞けばいいのか分かりません。
問題は次のとおりです:
set_session_test.php で登録したセッションが get_session_php で読み込めません。つまり、当日のページのセッションしか読み取れません。 。 。神馬に? ? ?神々に説明を求めてください。ヘルプのスコアが高い。
データベース構造は次のとおりです:
conf.php
<?phpdefine("DBHOST", "localhost");define("DBUSER", "root");define("DBPSW", "");define("DBNAME", "savesession");define("PAGENUM",10);
Final_session.php
<?php$gb_DBname = "savesession";$gb_DBuser = "root";$gb_DBpass = "";$gb_DBHOSTname = "localhost";$SESS_DBH = "";$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");function sess_open($save_path, $session_name){ global $gb_DBname,$gb_DBuser,$gb_DBpass,$gb_DBHOSTname,$SESS_DBH; if(!$SESS_DBH = mysql_pconnect($gb_DBHOSTname,$gb_DBuser,$gb_DBpass)){ echo "<li>Mysql Error:".mysql_errno()."</li>"; die(); } if(!mysql_select_db($gb_DBname)){ echo "<li>Mysql Error:".mysql_errno()."</li>"; die(); } return true;}function sess_close(){ return true;}function sess_read($key){ global $SESS_DBH,$SESS_LIFE; $qry = "SELECT * FROM db_session WHERE sesskey = '$key' and expiry > ".time(); $qid = mysql_query($qry, $SESS_DBH); if(list($value) = mysql_fetch_row($qid)){ return $value; } return false;}function sess_write($key, $val){ global $SESS_DBH,$SESS_LIFE; $expiry = time()+$SESS_LIFE; $value = $val; $qry = "INSERT INTO db_session VALUES('$key', $expiry, '$value')"; //echo $qry; $qid = mysql_query($qry,$SESS_DBH); if(!$qid){ $qry = "UPDATE db_session SET expiry=$expiry,value='$value' WHERE sesskey='$key' and expiry>".time(); $qid = mysql_query($qry); } return $qid;}function sess_destory($key){ global $SESS_DBH; $qry = "DELETE FROM db_session WHERE sesskey = '$key'"; $qid = mysql_query($qry, $SESS_DBH); return $qid;}function sess_gc($maxlifetime){ global $SESS_DBH; $qry = "DELETE FROM db_session WHERE expiry<".time(); $qid = mysql_query($qry, $SESS_DBH); return mysql_affected_rows($SESS_DBH);}session_module_name();session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destory", "sess_gc");
set_session_test.php
<?phpinclude_once 'final_session.php';session_start();$_SESSION['message'] = "Can I help you?";$_SESSION['message1'] = "No, Thank ";$_SESSION['Tom'] = "Tom";echo $_SESSION['message'];echo $_SESSION['message1'];echo $_SESSION['Tom'];echo "<a href=\"get_session_test.php\">显示SESSION</a>";?>
get_session_test.php
<?phpinclude_once 'final_session.php';session_start();$_SESSION['test'] = "test";echo $_SESSION['test'];$_SESSION['test2'] = "test22222222222";echo $_SESSION['test2'];echo $_SESSION['message'];echo $_SESSION['message1'];echo $_SESSION['Tom'];?>
ディスカッションへの返信 (解決策)
session_set_save_handler ()
注: この関数を使用する前に、まず php.ini ファイル session.save_hadler=user を設定する必要があります。そうしないと、session_set_save_handler() は有効になりません。
session_set_save_handler()
注: この関数を使用する前に、まず php.ini ファイル session.save_hadler=user を設定する必要があります。そうしないと、session_set_save_handler() は有効になりません。
試してみました。 。これは、ini_set() 関数を使用して設定することもできます。 。結果は依然として同じです。 。 。データベースにセッションが書き込まれています。 。
if(list($value) = mysql_fetch_row($qid)){
? ? ? ?
すべてのフィールドをクエリしているのに、なぜ最初のフィールドだけが取り出されるのですか?
それは sessionid ではないですか?
sess_read の
$qry = "SELECT * FROM db_session WHERE sesskey = '$key' and expiry > ".time();
を
$qry = "SELECT value FROM db_session WHERE sesskey = '$key' and expiry > ".time();
に置き換えるだけです。
Cookie を試して、問題が解決できるかどうかを確認してください。
元の投稿者 $_SESSION['message'] = "お手伝いできますか?";
出力変数を見てください。 echo $_SESSION['message'];
......
元の投稿者のコードを試してみました...
まだ正解はありません。
マスターはいないのですか?
これは、ページ内値の転送の問題よりもはるかに高度です。フォームに入力されたすべてのコンテンツを保存して、必要なときに使用したいだけです。この関数には、私のものよりも多くの機能があります。 。 。いつでもフォローしてください。
あと 1 か所
function sess_write($key, $val){ global $SESS_DBH,$SESS_LIFE; $expiry = time()+$SESS_LIFE; $value = $val; $qry = "REPLACE INTO db_session VALUES('$key', $expiry, '$value')"; $qid = mysql_query($qry,$SESS_DBH);}
さて。 。私はそれを試してみます。 。しかし、これは問題ではないような気がします。 。セッションが正常に書き込まれたためです。 。読み書きの問題です。
別の
PHP コードがあります
function sess_write($key, $val){
$expiry = time()+$SESS_LIFE;
$value = $val ; "REPLACE INTO db_session VALUES('$key', $expiry, ...
まだ機能しません... でも REPLACE の使い方を学びました... 教わりました。
専門家が解決するのを待っていますそれ... さらに、それがどのようなストレージ構造であるかを理解できるように、写真を投稿します
問題はないようです。 11. ルーの返信:
別の
PHP コード
function sess_write($key, $val){
global $SESS_DBH,$SESS_LIFE;
$value = $val + 同じ $key を取得します。前回の訪問
なぜまだ行われていないのですか?
これは私が書き直したコードです
グローバル変数を使用するのが好きではないので、ライブラリ名とテーブル名も変更しました。
<?phpdefine("DBHOST", "localhost");define("DBUSER", "root");define("DBPSW", "");define("DBNAME", "test");define("PAGENUM",10);define("SESS_LIFE", get_cfg_var("session.gc_maxlifetime"));function sess_open($save_path, $session_name){ if(! $conn = mysql_pconnect(DBHOST, DBUSER, DBPSW)){ echo "<li>Mysql Error:".mysql_errno()."</li>"; die(); } define("SESS_DBH", $conn); if(!mysql_select_db(DBNAME, SESS_DBH)){ echo "<li>Mysql Error:".mysql_errno()."</li>"; die(); } return true;}function sess_close(){ return true;}function sess_read($key){ $qry = "SELECT * FROM sessions WHERE sesskey = '$key' and expiry > ".time(); $qid = mysql_query($qry, SESS_DBH) or die(mysql_error()); $r = mysql_fetch_assoc($qid); return $r['value'];}function sess_write($key, $val){ $expiry = time()+SESS_LIFE; $value = $val; $qry = "REPLACE INTO sessions VALUES('$key', $expiry, '$value')"; $qid = mysql_query($qry, SESS_DBH);}function sess_destory($key){ $qry = "DELETE FROM sessions WHERE sesskey = '$key'"; $qid = mysql_query($qry, SESS_DBH); return $qid;}function sess_gc($maxlifetime){ $qry = "DELETE FROM sessions WHERE expiry<".time(); $qid = mysql_query($qry, SESS_DBH); return mysql_affected_rows(SESS_DBH);}//session_module_name();session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destory", "sess_gc");session_start();
if(list($value) = mysql_fetch_row($qid)){ return $value; }
は間違っています。テーブル内の値フィールドであるセッションのシリアル化された文字列を返し、それを
if($value = mysql_fetch_row($qid)){ return $value[2]; }
に変更してください。ただし、コード テストは実行できます。何か問題があるかどうかまだ知りたいです
なぜまだ行われていないのですか?
これは私が書き直したコードです グローバル変数を使用するのが好きではないので、ライブラリ名とテーブルも変更しました。名前
define("DBHOST", "root");
define("DBPSW", ""); ", "テスト" );
define("PAGENUM",10);
定義……
そのコードには何も問題はありません。 。テスト済み。 。変更しても結果は同じです。 PHP コード
if (list ($ value) = MySQL_FETCH_Row ($ qid)) {
Return $ Value; フィールドを
PHP コード
if($value = mysql_fetch_row($qid)){
100 ポイントになりますあなたに与えられます。 。 。何か問題が見つかるかどうか待ってみます。 。この二日間で投稿しました。
なぜまだ行われていないのですか?
これは私が書き直したコードです。
グローバル変数を使うのが嫌なので定数に変更し、ライブラリ名とテーブル名も変更しました
PHP コード
define("DBPSW", "");
define("DBNAME", "test");
define("PAGENUM",10);
defi...
の理由テーブル内の sesskey 列 主キーや一意の制約がないため、session_start() は毎回同じ SID を生成します。これは、データベース テーブルの sesskey 列を主キーまたは一意のキーとして設定することで解決できます。
注: テスト コードを数回更新してからデータベースをチェックすると、複数の重複した SID が見つかります
私のデータベースには主キーがあります。 。あなたの言っていることはわかります。しかしそうではありません。
この問題についても返信で言及しました。 データベースへの書き込みには問題ありません。 。普通に挿入できます。
しかし、設定した主キーは sesskey ではなく (sesskey と expiry) ですか? ? ?
しかし、設定した主キー (sesskey と expiry) は sesskey ではありませんか? ? ?
問題は以下にある可能性があります:
function sess_read($key){
$qry = "SELECT * FROM session WHERE sesskey = '$key' and expiry > ".time();
$qry を出力します。 、手に入るかどうか見てみましょう? sess_read の
は、データベースが読み取られた後に値フィールドのデータのみを返すことができます。データ全体を返すことはできません

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

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

ホットトピック











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

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

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

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

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

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

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

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします
