ホームページ  >  記事  >  バックエンド開発  >  PHP session_start() の問題解決_PHP チュートリアル

PHP session_start() の問題解決_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-15 13:33:09705ブラウズ

記事で詳しく紹介します

PHPのセッション関数については、特にいくつかのエラーといくつかのエラーのない結果があり、適切な答えを見つけることができませんでした。後者は、多くの初心者にとって常に困難でした。ベテランでも時々混乱する人もいる。この記事では、みんなの参考のためにこれらの問題を簡単にまとめます。

1.
エラー メッセージ
警告: セッション Cookie を送信できません - ヘッダーはすでに送信されています
警告: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されています
分析と解決策
この種の問題の原因は、プログラムで PHP を使用していることです。 session_start()の際、実際のHTMLコンテンツは先に出力されています。おそらく、私はそれを持っていないので、メッセージをエコーするか印刷するだけだと言うかもしれません。申し訳ありませんが、echo または print ステートメントによって生成される出力は、実際の HTML コンテンツ出力です。この種の問題を解決する方法は、session_start() をプログラムの最初の行に移動することです。

2.
エラー メッセージ
警告: open(F:/689phpsessiondatasess_66a39376b873f4daecf239891edc98b5, O_RDWR) が失敗しました
分析と解決策
このようなエラー ステートメントは、通常、php.ini の session.save_path 項目が適切に設定されていないことが原因です。 session.save_path と session.cookie_path を
session_save_path = c: emp に設定します
session.cookie_path = c: emp
その後、c: ディレクトリに一時ディレクトリを作成します。これで完了です

エラー メッセージ

警告: しようとしています
分析と解決策
で初期化されていないセッションを破棄する このようなプロンプトは通常、session_destroy() 関数を直接調整することによって発生します。多くの友人は、session_destroy() 関数が独立して実行できると考えていますが、そうではありません。解決策は、session_destroy() 関数を呼び出す前に、PHP session_start() を使用してセッション関数を有効にすることです。

4. 質問: 現在のセッションの ID 値を取得するにはどうすればよいですか?

最も簡単な方法は次のとおりです:

SID をエコーする
すぐにわかります。

5. 質問: ヘッダー関数を呼び出す前にプログラムに出力がありません。config.php ファイルが含まれているにもかかわらず、セッションで質問 1 のような結果が報告されるのはなぜですか。同じエラーです。ヘッダーの前に PHP session_start() を使用したためですか?

答え: おそらく、php プログラムを注意深くチェックしましたが、header() を参照する前にエラーはなく、出力もありません。インクルードファイルに!しかし、カーソルキーを使用して、PHP コードの end ステートメントの後にチェックを移動しますか?>?すると、?> の後に空白行またはいくつかのスペースがあることがわかります。これらの空白行またはスペースを削除すると、問題は解決します。

注: この問題は PHP4.1.2 以降のバージョンで発生しますが、テストされていません。

6. 質問: セッションを使用してメイン ページにログインした後、セッションを使用して他のページへのログインを制限するにはどうすればよいですか? 。 。

回答: 最も簡単な方法は

<ol class="dp-xml">
<li class="alt"><span><span>session_start();   </span></span></li>
<li><span>if(!session_registered<br>(&apos;login&apos;) <br>││ $login != true) {   </span></li>
<li class="alt"><span>echo "你没有登陆";   </span></li>
<li><span>exit;   </span></li>
<li class="alt"><span>} </span></li>
</ol>

7 です。 質問: session_register() を使用してセッション変数を登録しましたが、ヘッダーまたは JavaScript リダイレクトステートメントを使用すると、次のページの登録された変数値にアクセスできません。どうやって解決すればいいでしょうか? 問題のプログラム断片:

<ol class="dp-xml">
<li class="alt"><span><span>session_start();   </span></span></li>
<li>
<span>$</span><span class="attribute">ok</span><span> = &apos;love you&apos;;   </span>
</li>
<li class="alt"><span>session_register(&apos;ok&apos;);   </span></li>
<li><span>header("location : next.php");   </span></li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
<li><span>next.php   </span></li>
<li class="alt"><span>session_start();   </span></li>
<li><span>echo $ok;   </span></li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
</ol>

解決策:

header関数やwindow.locationなどの関数を使用すると、前のページに登録したセッション変数が簡単に失われます。 この問題については、まだ原因がわかりません。詳細な答え。

しかし、解決策はあります。以下に示すように、
header("Location: next.php" ."?" . SID);
次のページにジャンプする場合、セッションの現在の ID がパラメータとして使用され、次のページに渡されます。

8. セッションで配列を渡す方法

<ol class="dp-xml">
<li class="alt"><span><span>session_register<br>(&apos;data&apos;);   </span></span></li>
<li>
<span>$</span><span class="attribute">data</span><span>=</span><span class="attribute-value">array</span><span>(1,2,3,4); </span>
</li>
</ol>

その方法は、最初に登録してから値を割り当てることです

9. 質問 9: $HTTP_GET_VARS['**&apos] のようなメソッドを使用してセッション値にアクセスできますか? ;]?

回答: はい、次のグローバル配列を使用してセッションにアクセスし、Web ページのセキュリティを強化できます

$HTTP_SESSION_VARS

$_SESSION
ルーチン:

<ol class="dp-xml">
<li class="alt"><span><span>session_start();   </span></span></li>
<li>
<span>$</span><span class="attribute">username</span><span> = &apos;stangly.<br>wrong&apos;;   </span>
</li>
<li class="alt"><span>session_register(&apos;<br>username&apos;);  </span></li>
<li><span>echo $HTTP_SESSION_VARS<br>[&apos;username&apos;];   </span></li>
<li class="alt"><span>echo &apos;  </span></li>
<li><span>&apos;;   </span></li>
<li class="alt"><span>echo $_SESSION<br>[&apos;username&apos;];   </span></li>
<li>
<span class="tag">?></span><span>   </span>
</li>
</ol>

独自のプログラムを変更するには、このルーチンを参照してください。

質問 10: session_unregister() と session_destroy() の違いは何ですか?

session_unregister() 関数の主な機能は、現在のセッションの登録を解除することです (php.net からの翻訳)


ルーチン:

<ol class="dp-xml">
<li class="alt"><span><span>if(isset($_COOKIE[session_name()])) {   </span></span></li>
<li><span>session_start();   </span></li>
<li class="alt"><span>session_destroy();   </span></li>
<li><span>unset($_COOKIE[session_name()]);   </span></li>
<li class="alt"><span>} </span></li>
</ol>

上記は、一部の初心者がよく遭遇する PHP session_start() の問題です。詳細が不明瞭で間違いがあるかもしれませんが、専門家からのアドバイスや批判をお願いします。


http://www.bkjia.com/PHPjc/446083.html

tru​​ehttp://www.bkjia.com/PHPjc/446083.html技術記事 PHP のセッション関数については、記事で詳しく紹介しますが、特にいくつかのエラーとエラーのない結果を見つけることができませんでした...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。