ホームページ バックエンド開発 PHPの問題 PHPセッションが機能しない場合の対処方法

PHPセッションが機能しない場合の対処方法

Sep 28, 2020 am 09:04 AM
php session

php セッションが機能しない場合の解決策: まず、php 構成ファイルを開き、次にセッション関連の構成項目を見つけ、次に新しいセッション ファイルを作成して権限を設定し、最後にファイルを再アップロードします。

PHPセッションが機能しない場合の対処方法

推奨: 「PHP ビデオ チュートリアル

PHP プロジェクトでのセッション エラーを解決する方法

今日、仕事が終わってシャトルバスに乗りました。駅に着こうとしたところ、前の会社のリーダーからQQメッセージが届きました。これは火事の鎮火を意味します。バスを降りた後、 , 戻ってきて、コンピューターで詳しく尋ねました。リーダーの説明は次のとおりです。

このアドレス、テスト用紙をアップロードしてタスクを公開した後、セッションがいつ消えたのかを教えてください。解答用紙の設定

このプロジェクトの背景は当初すべて私が担当し、一人で開発したため、問題はすぐに発見されました。プロセスは: ユーザーが js コンポーネントを介してテスト用紙をアップロードします。テスト用紙をアップロードする方法では、セッションを使用して、アップロードされたばかりのテスト用紙の詳細情報 (名前、サフィックス、ファイルに保存されている ID など) を保存します。アップロードが成功したら、ページ上の学校、学年、難易度などのその他のオプションをクリックし、最後に送信をクリックします。送信の処理方法では、最初に、アップロードしたばかりのセッション値が存在します。存在しない場合は、テスト用紙のホームページにジャンプします。このメソッドで $_SESSION を出力しましたが、値がありませんでした。これは奇妙でした。以前は正常に動作していました。そこで、いつから始まったのか聞いてみると、午後の仕事を終えようとしたときに先生から電話があり、テスト用紙のアップロードと解答用紙の設定が失敗し、ジャンプが続いているとのことでした。そこで、サーバー環境が変更されたかどうかを再度尋ねましたが、リーダーは「変更していません」と答えました。

問題があるので解決しましょう。この時期にたまたま「PHP Core Technology and Best Practices」という本を読んでいたのですが、セッションとCookieについて詳しく解説されており、両者についての理解も深まりました。そこで、まずphpの設定ファイルを開いてセッション関連の設定項目を探したところ、session.save_pathが/data2/sessionになっていたのですが、以前は/data1/sessionに設定されていた記憶があるのですが、どう変わったのでしょうか?そこで終了してパスを確認しました。最初はディレクトリの権限が不十分だと思いましたが、後でそのようなディレクトリがまったくないことがわかりました。各セッションがページにまたがらないのも不思議ではありません。そこで、新しいファイルを作成し、権限を設定し、再度アップロードすると、すべてが正常に戻りました。

これを書いているので、セッション関連の技術的な点についても話したいと思います。セッションはサーバー側に保存され、デフォルトではファイルに保存されます (session.save_handler = files)。では、セッションはどのように生成されるのでしょうか?セッションは session_start() 関数を通じて生成されます。この関数が実行されると、セッションが保存されているディレクトリにファイルとそれに対応する一意のセッション ID が生成されます。セッション ファイルのデータは、セッション ID を通じて取得できます。 。 session_start() が実行されるたびに新しいセッション ファイルが生成されるため、以前に生成されたセッション ファイルを使用するにはどうすればよいでしょうか? session_id($session_id) だけを使用すると、セッション ファイルは新たに生成されませんが、それに対応するセッション ID は生成されます。セッションファイルが読み取られます。デフォルトでは、セッション ID はクライアント (ブラウザ) の Cookie を使用してセッション ID を保存します (Chrome ブラウザで F12 を押し、Resources-Cookie をクリックするとわかります)。 $_COOKIE['PHPSESSID'] を使用して取得できます。その PHPSESSID はセッション ID のデフォルト名です。php.ini の session.name で設定できます。セッション ID の名前を取得するには、スクリプト内で session_name() を使用します。ブラウザがサーバーと通信するたびに、ブラウザはセッション ID をサーバーに渡し、サーバーは渡されたセッション ID に基づいて対応するセッション ファイルを見つけ、対応する情報を取得し、関連する操作を実行します。クライアント(ブラウザ)が Cookie を無効にすると、サーバーはセッション ID を受信できなくなるため、このときセッション ID を明示的に渡す必要があります。 2 つの方法: URL を通じてセッション ID を手動で渡すか、非表示のフォームを通じてセッション ID を渡します。上記の 2 つの方法では、サーバーの PHP 環境の session.use_trans_sid 値が 1 である必要があります。

これほどくどい話をした後、最終的に出たのは「話は安い、コードを見せて」というライナスの言葉でした。

<?php
session_start();
$_SESSION[&#39;arr&#39;] = array(&#39;name&#39; => &#39;molaifeng&#39;, &#39;hobby&#39; => &#39;php&#39;);
?>
<a href="testSession.php?<?php echo session_name(); ?>=<?php echo session_id()?>">testSession</a>
ログイン後にコピー
<?php
 
session_start($_REQUEST[session_name()]);
print_r($_SESSION);
ログイン後にコピー

コードは理解できると思いますので、説明は省略します。

最後に、要約すると、クロスページ セッションの失敗は通常、上記の点が原因で発生します。 1. session.save_path が正しくない (権限が不十分であるか、ディレクトリが存在しないなど) 2. サーバー PHP 構成の session.use_trans_sid 値が 0 である; 3. クライアントで Cookie が無効になっている。しかし、最初の状況の頻度はかなり高いはずだと思います。

【2018-05-21更新】

金曜日の夜にオンラインにアクセスすると、別の罠に遭遇しました。このフレームワークは CI を使用し、セッションは MySQL テーブルに書き込みます。最初は、上記の症状と全く同じだったので、sessionディレクトリをリセットし、該当する読み書き権限を与えましたが、何も起こりませんでした。その後、そのテーブルがメモリテーブルであることが分かり、メモリテーブルの最大値を超えていると思い、テーブルをクリアしましたが、問題は解決しませんでした。最後に、2 つのバージョンの違いを比較した結果、セッションを保存するときに 2 つの新しいフィールドが追加されたことがわかりました。そのため、消去法を使用し、最初に両方に注釈を付け、次にそれらを 1 つずつ開き、最終的に問題を特定しました。新しく追加された値は、型テーブルのすべての値を保存するために使用されることがわかりました。最初にテストしたときは、数個の値しかありませんでした。その後、オンラインになると、100 個以上の値が保存されました。同時に、フィールドのサイズは 3000 しかありませんでした。バーストしていたに違いありません。そこで、まずフィールドのサイズを大きくしてオンラインで検証できるようにし、次にテーブル内のすべての値が書き込まれないように関連するロジックを変更しました。

以上がPHPセッションが機能しない場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles