ホームページ  >  記事  >  バックエンド開発  >  SESSIONの落とし穴

SESSIONの落とし穴

WBOY
WBOYオリジナル
2016-08-08 09:26:101236ブラウズ

警告: セッション Cookie を送信できません- ヘッダーはすでに送信されました

警告: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されました

分析と解決策

その理由は、プログラム内でsession_start()を使用しているためです

、以前に実際に練習したことがある

htmlの内容が出力されます。もしかしたら、私はメッセージを持っていない、メッセージを

エコー

するか印刷するだけだ、と言うかもしれません。申し訳ありませんが、echo

または

print ステートメントによって生成された出力は、実際の html コンテンツ出力です。この種の問題を解決する方法は、 session_start() をプログラムの最初の行 に調整することです。 2. エラーメッセージ警告: open(F:/689phpsessiondatasess_66a39 376) b873f4daecf239891edc98b5, O_RDWR) が失敗しました

分析と解決策

:

このエラー ステートメントは、通常、php.ini

session.save_path 項目が適切に設定されていないことが原因です。解決策は、

session.save_path

を変更することです。 session.cookie_path 設定は

session_save_path = c:temp session.cookie_path = c:temp に設定されています次に、c:tempディレクトリ下の

3.

エラーメッセージ 警告: の初期化されていないセッションを破棄しようとしています

分析と解決策

:

このようなプロンプトは通常、session_destroy()関数を直接調整することによって発生します。多くの友人は、

session_destroy() 関数は独立して実行できると考えていますが、そうではありません。解決策は、

session_destroy()

関数を調整する前に、session_start()を使用してsession関数

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

最も簡単な方法は: echo SID; session_id('0-2-c-d-e ');session_start( );

$_SESSION['is_admin'] = 'はい'

;

エコーSID; ?>

:

私のプログラムは header 関数を呼び出しています。以前は

config.php

ファイルを に含めましたが、config.php ファイルには出力がありませんでした。 sessionでも問題1と同じエラーが発生しました。

headerの前にsession_start()を使用したためですか?

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

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

6

?

の答え: 最も簡単な方法は Session_start (); です。 isterEd ('ログイン') │ │ $ ログイン! = True) { エコー "ログインしていません"

7.ask

:me session_register()

を使用してsession変数を登録しましたが、headerを使用したり、

javascriptのリダイレクトステートメントを使用したりすると , すると次のページで session

登録されている変数値にアクセスできません。どうやって解決すればいいでしょうか? [テストが成功しませんでした

]

問題のプログラムの断片: session_start(); $ok = '愛しています' header("location : next.php"); next.php

echo $ok; >

解決策:

header関数やwindow.location

のような関数を使用すると、前のページVariablesに登録されたsessionは簡単に失われます。この問題の理由への答え。

しかし、解決策はあります。以下に示すように

header("Location: next.php" ."?" . SID); 次のページにジャンプするときは、

セッションの現在のを変更します。 id

はパラメータとして使用され、次のページに渡されます。

8.session配列

session_register('data');の渡し方$data=配列(1,2,3, 4 ; RS['**']

セッション

にアクセスするには?

答え: はい、次の global

配列を使用して

session にアクセスし、Web ページ

$HTTP_SESSION_VARS を強化できます $ _SESSION ルーチン

:

session_start(); $username = 'stangly.wrong' ; session_register('ユーザー名');

echo $HTTP_SESSION_VARS['ユーザー名'];

エコー $_SESSION['ユーザー名'];

?>

このルーチンを参照して、独自のニーズに合わせてプログラムを変更してください。

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

session_unregister() 主な関数は、現在の session 変数の登録を解除することです。ただし、$HTTP_SESSION_VARS または $_SESSION を使用して現在のページの session 変数を参照する場合は、unset() と連携する必要がある場合があることに注意してください。 session変数を削除します。

そしてsession_destroy()は現在のsession環境をクリアします。これは、session_destroy() 関数を使用した後は、session_is_registered() を使用して session の変数を検出できなくなることを意味します。ただし、globalsessionをクリアしたり、session.session cookieを使用したりすることはできないので、session_destroyを使用する前に行うことをお勧めします。使う$HTTP_SESSION_VARS $_SESSION セッションにアクセスします (php.netから翻訳)

ルーチン:

if(isset($_COOKIE [セッション名() ])) {

session_start();

unset($_COOKIE[session_name() ]);

)

session_start();

$_SESSION['is_admin'

] = 'はい'

; $is_admin = 'いいえ

;

echo $_SESSION['is_admin'

];?> 脆弱性の説明:

php.iniが入っている場合、register_globals = Onの場合、定義された変数は

session

と同じ名前に変更されます。 sessionを使用してログインすると、カジュアルログインの問題が発生します。

以上、SESSION の落とし穴をその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。