ホームページ >バックエンド開発 >PHPチュートリアル >SESSION 内の配列が取得される場合と取得されない場合があるのはなぜですか?
ログイン後: ユーザーオブジェクト user を SESSION に入れ、次のように $_SESSION['user']['priv'] にアクセスします。場合によってはこれが空であり、アクセスする前に
$user=$_SESSION['user']; を追加する必要がある場合があります。これは $_SESSION['user']['priv'] によって行われます。
私のphpバージョン5.4.22
配列を抽出せずに$_SESSION['user']['priv']に直接アクセスできる場合があります($user =$_SESSION['ユーザー'])、何が起こっているのでしょうか?
私の php バージョン 5.4.22
取得が失敗した場合: var_dump($_SESSION['user']); データを確認すると、結果は正しいです。その中にデータが入っています。 2段階に分けても入手可能ですが、正面からは入手できません。同じメソッド内では、これを初めて実行することはできません。 2回目からもこのように取得できます。セッションデータは変更されていません。
テストコードを与えた方が良いです
失敗した場合は少なくとも var_dump($_SESSION['user']); の結果を与えてください
テストコードは再現できません。検査はすべて正常です。実際には 2 つのステップが必要です。
まず外部要因を除外しましょう。出力 $_SESSION['user']['priv'] をテストしたときに、最初のアクセスの前にたまたまセッションをセットアップしていなかった可能性がありますか?
再現できない場合は、テストして解決してください
コードが間違って書かれているのではないかと疑ったことはありませんか?
$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
$_SESSION ライフサイクル デフォルトの時間は 20 分です
明らかに時間を超えています
Yes、Yes、No、ログ、各状況、デバッグに便利です。
取得が失敗した場合: var_dump($_SESSION['user']); データを確認すると、結果は正しいです。その中にデータが入っています。 2段階に分けても入手可能ですが、正面からは入手できません。同じメソッド内では、これを初めて実行することはできません。 2回目からもこのように取得できます。セッションデータは変更されていません。
----------
プログラムを書いたことがありますか?このような問題に遭遇したことはありませんか?私はこれに何度も遭遇しました。
まず外部要因を除外しましょう。出力 $_SESSION['user']['priv'] をテストしたときに、最初のアクセスの前にたまたまセッションをセットアップしていなかった可能性があります。
再現できない場合は、テストして解決してください
はい、可能な場合もあればそうでない場合もあり、それぞれの状況をログに記録し、デバッグに便利です。
最初の var_dump($_SESSION['user']); には値がありますか?分析用のコードを投稿することをお勧めします。
コードが間違って書かれているのではないかと疑ったことはありませんか?
すごい
あなたのコードは実行中のコードと異なります。コードを提供しない場合、どうやって分析できますか?
ログを追加して何度か取得すると、
var_dump($_SESSION['user']);
var_dump($_SESSION['user']['priv']); が簡単に見つかります。
$_SESSION['user']['priv'] = '' ; //priv赋值为空,谁取它都是空!
ポスターの意味は、2回目の訪問時にどの方法を使用しても、問題ありませんが、最初に 2D で直接読むと間違いなく問題が発生します。正しく理解できているかどうかはわかりません...
いいえ。他の意味は無視して、15 階だけを見てください。
文字化けが原因でしょうか?
文字化けはありません。
print_r($_SESSION['user']); このようにして、データ構造情報も同時に取得できるので、判断材料を作ることができます
エラーを再現することはできないので、 $_SESSION を割り当てるコードで理由を見つけてください
とても役に立ちます
データベースから取り出したユーザーオブジェクト 配列である場合もあれば、オブジェクトである場合もあります
を書いたことを疑ったことはありませんか
コードが間違っていますか?
リーリー
print_r($_SESSION['user']);
这样同时可以得到数据结构信息,才好做判断的依据
由于你不能再现错误,只有在对 $_SESSION 赋值的代码中找原因
极有可能是 从数据库里取出来的用户对象有时是数组,有时是对象
这是thinkphp中session函数读取session的代码:
if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null; } else { return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null; }
检查从数据库取出的数据是否异常
貌似没说清楚问题,也没找到原因。
分成2步就没有问题了,没有心思再管这些。结贴了。谢谢各位支持。