ホームページ  >  記事  >  PHPフレームワーク  >  laravel5.6とthinkphp3.2でredisを使用してセッションを共有する解決策について

laravel5.6とthinkphp3.2でredisを使用してセッションを共有する解決策について

藏色散人
藏色散人転載
2021-06-27 16:03:192349ブラウズ

実際のプロジェクトでは、過去のプロジェクトは thinkphp3.2 を使用して開発されており、現在この関数には次の機能が必要です更新予定の機能部分はlaravel5.6を使用して開発する予定です。

問題の説明

解決する必要のある重要な問題がいくつかあり、その 1 つはユーザー認証の問題です。つまり、システム 1 がログインするだけで、システム 2 はそのログイン情報を自動的に認識します。つまり、laravelとthinphpの共有セッションの問題という本質を解決する必要があります。

プログラム設計

セッションはストレージに Redis を使用します。 Thinkphp と laravel は一緒に redis にアクセスし、同じ cookie に基づいて redis に保存されている認証されたユーザー情報を自動的に取得します。

解決策

thinkphp で redis サポートが有効になる

thinkphp3.2 には統合セッションの redis サポートがありません。現時点では、php の設定を使用して有効にします。 Index.php に、次の 2 行のステートメントを追加します。

ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://redis:6379");
これを config.php 構成ファイルに追加することもできます

現時点では、thinkphp がセッションを保存するときに、 PHPREDIS_SESSION がプレフィックスとして保存されます。

laravel で redis を開く

laravel で redis を開く方法は比較的複雑です。具体的な情報については、公式ドキュメントを参照して、composer を使用して Predis をインストールし、関連する構成を実行する必要があります。

laravel は thinkphp のセッションを取得します

laravel は PHP の組み込みセッションを完全に非推奨にしたためです。したがって、$_SESSION を通じて情報を取得する方法はありません (未定義の変数エラーが発生する可能性もあります)。なぜなら、laravelのCookieは暗号化されているからです。そのため、laravel独自のCookieを利用してCookie情報を取得することはできません。

具体的な実装アイデアは次のとおりです。
1 ネイティブ Cookie を取得します。
2 PHPREDIS_SESSION を結合してキーを形成します。
3 redis を使用して、キーに格納されている値を直接取得します。

...
use Illuminate\Support\Facades\Redis;
...
    $cookie = $_COOKIE['PHPSESSID'];
    $session = Redis::get('PHPREDIS_SESSION:' . $cookie);

この $session は、thinkphp システムのセッション値です。

関連チュートリアルの推奨事項: 「laravel チュートリアル

以上がlaravel5.6とthinkphp3.2でredisを使用してセッションを共有する解決策についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。