58

「サーバーに触れていないことを誓います」という状況の1つがあります。正直なところ、php スクリプトには触れていません。私が抱えている問題は、php データが別のページまたはページの更新で保存されていないことです。セッション変数を設定できるため (例: $_SESSION['foo'] = "foo")、新しいセッションが正しく作成されていることがわかります。同じページに問題なく出力できます。しかし、同じ変数を使用しようとすると、別のページでは設定されていません! ホストサーバーで何が起こっているかを確認するために使用できる PHP 関数または情報はありますか?

現在、私のホストのサーバーで機能しないスクリプトの例を次に示します。

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

ページを更新した後、「views」変数がインクリメントされません。これは彼らの問題だと思いますが、最初に私が完全な馬鹿ではないことを確認したかったのです.

私のホストのサーバー (PHP バージョン 4.4.7) の phpinfo() は次のとおりです。 代替テキスト

4

22 に答える 22

42

役立つ情報をありがとう。ホストがサーバーを変更し、もう存在しない /var/php_sessions 以外の別のセッション保存パスを使用し始めたことが判明しました。ini_set(' session.save_path','SOME WRITABLE PATH');解決策は、すべてのスクリプト ファイルで宣言することでしたが、それは面倒でした。ホストと話をしたところ、彼らはセッション パスを、実際に存在した実際のパスに明示的に設定しました。これがセッションパスの問題を抱えている人の助けになることを願っています.

于 2008-10-01T21:57:04.140 に答える
13

https:// と http:// が混在していないことを確認してください。セッション変数は、安全なセッションと安全でないセッションの間を流れません。

于 2011-10-25T01:38:28.447 に答える
9

同じ問題がありました-私に起こったことは、サーバー管理者がsession.cookie_secureブール値をオンに変更したことです。これは、Cookieが安全な接続を介してのみ送信されることを意味します. Cookie が見つからなかったため、php は毎回新しいセッションを作成していたため、セッション変数は表示されませんでした。

于 2010-10-11T16:16:45.987 に答える
8

使用phpinfo()して設定を確認してくださいsession.*

情報が Cookie に保存されていて、ブラウザが Cookie を受け入れないなどの場合があります。

最初にそれを確認し、結果を返してください。

print_r($_SESSION);この変数のダンプを取得して内容を確認するためにa を実行することもでき ます....

あなたphpinfo()の はsession.save_path有効なものですか?Web サーバーにこのディレクトリへの書き込みアクセス権がありますか?

お役に立てれば。

于 2008-10-01T02:04:27.317 に答える
6

次の問題がありました

index.php

<?
    session_start();
    $_SESSION['a'] = 123;
    header('location:index2.php');
?>

index2.php

<?
  session_start();
  echo $_SESSION['a'];
?>

変数$_SESSION['a']が正しく設定されていません。それから私はそれに応じて変更しましindex.php

<?
    session_start();
    $_SESSION['a'] = 123;
    session_write_close();
    header('location:index2.php');
?>

これが内部的に何を意味するのかわかりません。セッション変数の変更が十分に迅速ではなかったことを自分自身に説明するだけです:)

于 2011-07-21T14:46:42.233 に答える
5

セッションの保存パスが Web サーバーによって書き込み可能かどうかを確認します。

Cookie がオンになっていることを確認してください.. (何かをテストするために Cookie をオフにしたことを忘れてしまいます)

firebug 拡張機能で firefox を使用して、Cookie が設定され、返送されているかどうかを確認します。

これとは関係のないことですが、php5 を見てみましょう。なぜなら、php 4.4.9 は php4 シリーズの最後だからです。

于 2008-10-01T02:23:22.620 に答える
3

スクリプトが実行されるフォルダーのグループと所有者が誰であるかを確認します。グループ ID またはユーザー ID が間違っている場合 (たとえば、root に設定されている場合)、セッションが正しく保存されません。

于 2010-04-11T09:15:41.360 に答える
2

私は同様の問題の答えを探すのに何年も費やしました。非常によく似たコードが同じサーバー上の別の .php で完全に機能したため、コードやセットアップの問題ではありませんでした。この問題は、このページのセッションに大量のデータが保存されていることが原因であることが判明しました。ある場所には、次のような行が$_SESSION['full_list'] = $full_listあり$full_listました。データベースからロードされたデータの配列。各行は約 150 要素の配列でした。数年前にコードが最初に書かれたとき、DB には約 1000 行しか含まれていなかったので、$full_list約 100 個の要素が含まれており、それぞれが約 20 個の要素の配列です。時間の経過とともに、20 要素が 150 行になり、1000 行が 17000 行になったため、コードは 64 MB 近くのデータをセッションに保存していました。どうやら、この量のデータが保存されているため、他のデータの保存を拒否したようです。データをセッションに保存せずにローカルで処理するようにコードを変更すると、すべてが完全に機能しました。

于 2011-06-21T16:32:33.817 に答える
2

自分のサーバー (PHP 5) でコードをテストしたので、コード エラーをなくすことができます。

確認する内容は次のとおりです。

  1. どこかで session_unset() または session_destroy() を呼び出していますか? これらの関数は、セッション データをすぐに削除します。これらをスクリプトの最後に置くと、あなたが説明したとおりに動作し始めます。

  2. すべてのブラウザで同じように動作しますか? あるブラウザーでは機能するが別のブラウザーでは機能しない場合、機能していないブラウザーの構成に問題がある可能性があります (つまり、Cookie をオフにしてからオンにするのを忘れた、または誤って Cookie をブロックしている)。

  3. セッションフォルダーは書き込み可能ですか? is_writable() でこれをテストすることはできないため、(phpinfo() からは /var/php_sessions のように見える) フォルダーに移動し、セッションが実際に作成されていることを確認する必要があります。

于 2008-10-01T04:36:39.867 に答える
2

If you set a session in php5, then try to read it on a php4 page, it might not look in the correct place! Make the pages the same php version or set the session_path.

于 2010-04-10T14:50:58.340 に答える
2

同様の問題があったときに見つけた1つの解決策(Apache 1を搭載したOSXとPHP5に切り替えたばかり)は、1つの特定のキーの設定を解除すること(つまり、unset($ _SESSION ['key']);)が原因で保存されないことを知っています。そのキーをそれ以上設定解除しないとすぐに、それは保存されました。別のサイトのそのサーバーを除いて、これを二度と見たことがありませんが、それは別の変数でした. どちらも特別なことではありませんでした。

このダリルに感謝します。これは私を助けました。セッション変数を削除していましたが、何らかの理由でセッションがコミットされませんでした。今は代わりにnullに設定しているだけです(これは私のアプリでは問題ありません)、それは機能します。

于 2009-06-30T21:50:07.020 に答える
2

インクリメントする前に、「views」の値を確認してください。何らかの奇妙な理由で文字列に設定されている場合、それに 1 を追加すると、常に 1 が返されます。

if (isset($_SESSION['views'])) {
    if (!is_numeric($_SESSION['views'])) {
        echo "CRAP!";
    }
    ++$_SESSION['views'];
} else {
    $_SESSION['views'] = 1;
}
于 2008-10-01T02:06:09.433 に答える
1

I know one solution I found (OSX with Apache 1 and just switched to PHP5) when I had a similar problem was that unsetting 1 specific key (ie unset($_SESSION['key']);) was causing it not to save. As soon as I didn't unset that key any more it saved. I have never seen this again, except on that server on another site, but then it was a different variable. Neither were anything special.

于 2008-10-01T05:52:31.823 に答える
1

domain.com/destpage.phpにリダイレクトされたwww.domain.com/auth.phpからアクセスしていた安全なページを使用しているときに、この問題が発生しました。auth.phpリンクからwwwを削除しましたが、機能しました。すべてが他の方法で機能したので、これは私を投げました。しかし、目的地に到着したとき、セッションは設定されていませんでした。

于 2012-01-12T18:02:03.587 に答える
1

session_write_close(); を使用しているかどうかを確認してください。どこでも、私は別のセッションの直後にこれを使用していましたが、セッションに再度書き込もうとしましたが、うまくいきませんでした..だから、sh * t outとコメントしてください

于 2009-07-31T11:43:56.333 に答える
1

これは、他のコメントで対処されていない一般的な問題の 1 つです。ホストは何らかのキャッシュを実行していますか? それらが何らかの方法で結果を自動的にキャッシュしている場合、この種の動作が発生します。

于 2008-10-01T07:18:27.933 に答える
1

私のソリューションを追加する:

正しいドメインにアクセスしているかどうかを確認してください。を使用してセッションを開始し、 ( なしで)www.mysite.comから受信しようとしました。mysite.comwww

安全な側/サイトになるように、すべてのドメインの htaccess 書き換えを www に追加することで、これを解決しました。

また、http または https を使用しているかどうかも確認してください。

于 2014-10-03T14:35:50.397 に答える
1

見落とされがちな一般的な問題は、session_start() コマンドの前に他のコードや余分なスペースがあってはならないということです。

session_start() の前に空白行があり、正しく機能しないという問題が発生しました。

于 2012-06-20T10:58:26.597 に答える
1

これは、ページで session_start() ステートメントを誤って見逃した場合にも発生する可能性があることに注意してください。

于 2009-05-31T14:11:38.950 に答える
1

セッション Cookie パスを「/」ではなく「//」に設定しました。ファイアーバグは素晴らしいです。それが誰かに役立つことを願っています。

于 2011-07-12T14:13:42.397 に答える
1

php.ini を編集します。
session.gc_probability の値が 1 だと思うので、0 に設定します。

session.gc_probability=0
于 2012-09-23T18:01:24.790 に答える
0

他にやらなければならなかったことがいくつかあります (同じ問題がありました: PHP を 5.4 にアップグレードした後、セッションが保持されません)。サーバーの php.ini の内容によっては、これらが必要ない場合もあります (phpinfio() を確認してください)。

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

基本的に、php.ini は Cookie なしに設定する必要があり、セッション パラメータは osc が必要とするものと一致している必要があります。

また、application_top.php のいくつかのセッション コード スニペットを変更する必要がある場合があります。tep_session_is_registered(...) 呼び出しに存在しないオブジェクトを作成し (たとえば、ナビゲーション オブジェクト)、$HTTP_ 変数を新しい $_SERVER 変数に設定し、空のオブジェクトに対するその他の isset テストはほとんどありません (Google で情報を入手してください)。元の sessions.php ファイル (インクルード/クラスとインクルード/関数) をわずかに変更した application_top.php で使用して、元の状態に戻すことができるようになりました。php.ini の設定が主な問題でしたが、これはもちろん、サーバー会社がデフォルトで何をインストールしているかによって異なります。

于 2014-10-04T10:29:04.067 に答える