phpのsession_idが変化し続ける

WBOY
リリース: 2016-06-23 13:58:58
オリジナル
1287 人が閲覧しました

ページの session_id が変更され続ける理由を教えてください。更新するたびに変更されます。問題の原因は何ですか? (解決策) )

あなたのブラウザは Cookie をサポートしていませんか?

最も可能性が高いのは session.auto_start = 1

あなたのブラウザが Cookie をサポートしていないことを除外するものではありません

session.auto_start = 0

私のブラウザは Cookie をサポートしています


それなら、私は話すコードを投稿するしかありません

RSS。 php

session_start();

$_SESSION["name"] = "lifffffff4";

echo "
";

echo session_id();

? >
最初に上記のファイルにアクセスし、次に次のファイルにアクセスします
Index.php
session_start();
echo $_SESSION["name"]; );

» ["名前"];
echo ""
?>
同じ効果


print_r($_COOKIE); を追加
空の配列をすべて出力しました

session_start();
$_SESSION["name"] = "lifffffff4";

echo $_SESSION["name"];

echo session_id(); Index.php">2222";
print_r($_COOKIE)

echo $_SESSION["name" ]; );
print_r($_COOKIE);
?> ini にセッション関連の設定はありますか?

php.ini を変更していないのですが、どうすればよいですか?

phpsession Cookie がないのはなぜですか?
これは間違いありません。
弱く尋ねます、session_id このプログラムには何か特別な用途がありますか?通常は $_SESSION を操作するだけです

setcookie を使用して Cookie 変数を設定し、それが読み取れるかどうかを確認します

同じコードを他の人のコンピューターに配置することもできます


echo     ini_get("session.use_cookies");//这个值多少
ログイン後にコピー

を使用しています。 setcookie を使用して cookie 変数を設定し、再度読み取れるかどうかを確認してみました。問題はありませんでした。エラー メッセージが表示されるかどうかを確認してください。


次に、セッション関連の php.ini 設定情報を投稿してください。皆さん、分析にご協力ください。

[セッション]
; データの保存/取得に使用されるハンドラー。
; http://php.net/session.save-handler
session.save_handler = ファイル

; save_handler に渡される引数。  ファイルの場合、これはパス
です。 データ ファイルが保存される場所。 注: Windows ユーザーはこれを変更する必要があります
; PHP のセッション関数を使用するための変数。
;
; パスは次のように定義できます:
;
;     session.save_path = "N;/パス"
;
; ここで、N は整数です。  すべてのセッション ファイルを
に保存する代わりに、 /path、これにより、N レベルの深さのサブディレクトリが使用され、
; セッション データをこれらのディレクトリに保存します。  これは、次のような場合に役立ちます
; または、お使いの OS に 1 つのディレクトリ内の多数のファイルに関する問題があり、
; 多くのセッションを処理するサーバーのより効率的なレイアウト。
;
; 注 1: PHP はこのディレクトリ構造を自動的に作成しません。
;         その目的のために、ext/session ディレクトリ内のスクリプトを使用できます。
; 注 2:
を選択した場合は、以下のガベージ コレクションに関するセクションを参照してください。         セッションのストレージにはサブディレクトリを使用します
;
; ファイル ストレージ モジュールは、デフォルトでモード 600 を使用してファイルを作成します。

を使用すると、これを変更できます。
;     session.save_path = "N;MODE;/パス"
;
; ここで、MODE はモードの 8 進表現です。 この
; に注意してください。 プロセスの umask は上書きされません。
; http://php.net/session.save-path
session.save_path = "d:/wamp/tmp"

; Cookie を使用するかどうか。
; http://php.net/session.use-cookies
session.use_cookies = 1

; http://php.net/session.cookie-secure
;session.cookie_secure =

; このオプションにより、PHP は
を保存および維持するために Cookie を取得して使用するようになります。 セッションID。 
との戦いに非常に役立つため、この作戦を推奨します。 独自のセッション ID を指定および管理しない場合のセッション ハイジャック。 それは
です。 セッションハイジャック防御のすべてが終わりではありませんが、良いスタートです。
; http://php.net/session.use-only-cookies
session.use_only_cookies = 1

; セッションの名前(Cookie 名として使用)。
; http://php.net/session.name
session.name = PHPSESSID

; リクエストの起動時にセッションを初期化します。
; http://php.net/session.auto-start
session.auto_start = 0

; Cookie の存続期間 (秒単位)、または 0 の場合はブラウザが再起動されるまでの存続期間。
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 1000

; Cookie が有効なパス。
; http://php.net/session.cookie-path
session.cookie_path = /

; Cookie が有効なドメイン。
; http://php.net/session.cookie-domain
session.cookie_domain =80tao.dev

; httpOnly フラグを Cookie に追加するかどうか。これにより、JavaScript などのブラウザ スクリプト言語にアクセスできなくなります。
; http://php.net/session.cookie-httponly
session.cookie_httponly =

; データをシリアル化するために使用されるハンドラー。  php は、PHP の標準シリアライザです。
; http://php.net/session.serialize-handler
session.serialize_handler = php

; 「ガベージ コレクション」プロセスが開始される確率を定義します
; すべてのセッションの初期化時に。 確率は
を使用して計算されます。 gc_probability/gc_divisor。 ここで、session.gc_probability は分子
です。 gc_divisor は方程式の分母です。 この値を 1 に設定します
; session.gc_divisor の値が 100 の場合、約 1% の確率で
が得られます。 gc はあらゆるリクエストで実行されます。
; デフォルト値: 1
; 開発値: 1
; 生産価値: 1
; http://php.net/session.gc-probability
session.gc_probability = 1

; 「ガベージ コレクション」プロセスが
ごとに開始される確率を定義します。 セッションの初期化。 確率は次の式を使用して計算されます。
; gc_probability/gc_divisor。 ここで、session.gc_probability は分子であり、
です。 session.gc_divisor は方程式の分母です。 この値を 1 に設定します
; session.gc_divisor の値が 100 の場合、約 1% の確率で
が得られます。 gc はあらゆるリクエストで実行されます。 この値を 1000 に増やすと、
が得られます。 0.1% の確率で、gc はどのようなリクエストでも実行されます。 大容量の本番サーバーの場合は、
; これはより効率的なアプローチです。
; デフォルト値: 100
; 開発価値: 1000
; 生産価値: 1000
; http://php.net/session.gc-divisor
session.gc_divisor = 1000

; この秒数が経過すると、保存されたデータは「ゴミ」として見なされ、
; ガベージ コレクション プロセスによってクリーンアップされます。
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime = 1440

; 注: セッション ファイルの保存にサブディレクトリ オプションを使用している場合
;       (上記の session.save_path を参照)、ガベージ コレクションは*行われません*
;       自動的に起こります。  ゴミは自分で処理する必要があります
;       シェルスクリプト、cron エントリ、またはその他のメソッドを介した収集。
;       たとえば、次のスクリプトは
と同等です。       session.gc_maxlifetime を 1440 (1440 秒 = 24 分) に設定:
;          cd /path/to/sessions; find -cmin +24 | xargs rm

; PHP 4.2 以下には、
を可能にする文書化されていない機能/バグがあります。 register_globals
の場合でも、グローバル スコープ内のセッション変数を初期化します。 無効になっています。  PHP 4.3 以降では、この機能が使用されている場合に警告が表示されます。
; 機能と警告は個別に無効にすることができます。 現時点では、
; 警告は、bug_compat_42 が有効になっている場合にのみ表示されます。 この機能
; 正しく対処しないと、重大なセキュリティ問題が発生する可能性があります。 
です; 本番サーバーではこの機能を使用しないことをお勧めします。 でも、あなたは
; 開発サーバーでこれを有効にし、警告も有効にする必要があります。 あなたが
; 開発サーバーではこの機能を有効にしないでください。
の場合でも警告は表示されません。 これによって引き起こされる使用エラーやデバッグエラーは追跡が難しい場合があります。
; デフォルト値: オン
; 開発値: オン
; 生産価値: オフ
; http://php.net/session.bug-compat-42
session.bug_compat_42 = オン

; この設定は、
を初期化するときに PHP によって警告を受けるかどうかを制御します。 セッションの価値をグローバル空間に移します。 session.bug_compat_42 は
の前に有効にする必要があります。 これらの警告は PHP によって発行される場合があります。 詳細については、上記のディレクティブを参照してください。
; デフォルト値: オン
; 開発値: オン
; 生産価値: オフ
; http://php.net/session.bug-compat-warn
session.bug_compat_warn = オン

; HTTP リファラーをチェックして、ID を含む外部に保存された URL を無効にします。
; セッションが
になるには、HTTP_REFERER にこの部分文字列が含まれている必要があります。 有効とみなされます。
; http://php.net/session.referer-check
session.referer_check =

; ファイルから読み取るバイト数。
; http://php.net/session.entropy-length
session.entropy_length = 0

; セッション ID を作成するためにここで指定します。
; http://php.net/session.entropy-file
;session.entropy_file = /dev/urandom
session.entropy_file =

; http://php.net/session.entropy-length
;session.entropy_length = 16

; HTTP キャッシュの側面を決定するには、{nocache,private,public,} に設定します
; または、アンチキャッシング ヘッダーの送信を避けるために、これを空のままにしておきます。
; http://php.net/session.cache-limiter
session.cache_limiter = nocache

; ドキュメントは n 分後に期限切れになります。
; http://php.net/session.cache-expire
session.cache_expire = 180

; trans sid サポートはデフォルトでは無効になっています。
; trans sid を使用すると、ユーザーのセキュリティが危険にさらされる可能性があります。
; このオプションは注意して使用してください。
; - ユーザーはアクティブなセッション ID を含む URL を送信できます
;   経由で他の人に送信します。 電子メール/irc/など
; - アクティブなセッション ID を含む URL が保存される場合があります
;   公的にアクセス可能なコンピュータ内。
; - ユーザーは同じセッション ID を使用してサイトにアクセスできます
;   ブラウザの履歴やブックマークに保存されている URL を常に使用します。
; http://php.net/session.use-trans-sid
session.use_trans_sid = 0

; セッション ID の生成に使用するハッシュ関数を選択します。
; 可能な値
;   0 (MD5 128 ビット)
;   1 (SHA-1 160 ビット)
; http://php.net/session.hash-function
session.hash_function = 0

; 変換時に各文字に何ビットを保存するかを定義します
; バイナリ ハッシュ データを読み取り可能なものに変換します。
; 可能な値:
;   4 (4 ビット: 0-9, a-f)
;   5 (5 ビット: 0-9、a-v)
; 6 (6 bits: 0-9, a-z, A-Z, "-", ",")
; Default Value: 4
; Development Value: 5
; Production Value: 5
; http://php.net/session.hash-bits-per-character
session.hash_bits_per_character = 5

; The URL rewriter will look for URLs in a defined set of HTML tags.
; form/fieldset are special; if you include them here, the rewriter will
; add a hidden field with the info which is otherwise appended
; to URLs. If you want XHTML conformity, remove the form entry.
; Note that all valid entries require a "=", even if no value follows.
; Default Value: "a=href,area=href,frame=src,form=,fieldset="
; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
; http://php.net/url-rewriter.tags
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

session.cookie_domain =80tao.dev


这个值去掉吧,,你确认需要?

这个是我项目的一个 配置 有影响吗

你说的去掉指的是什么意思

session.cookie_domain =80tao.dev
把这个去掉就可以了
但是为什么啊

session.cookie_domain =80tao.dev
把这个去掉就可以了
但是为什么啊

看命名还不清楚啊,,限制域啦

那个是设置session对应的cookie在什么域有效的
你是本地测试么?是http://localhost这么去访问你的项目的么?是的话就去掉,如果是正式站点,你改成

#注意加的那个点,表明所有子域有效,包括wwwsession.cookie_domain = .80tao.dev 
ログイン後にコピー

试下。

我填写那个域为什么就不行了啊  默认是空的 为什么 给我解释一下吧

那个是设置session对应的cookie在什么域有效的
你是本地测试么?是http://localhost这么去访问你的项目的么?是的话就去掉,如果是正式站点,你改成
PHP code
#注意加的那个点,表明所有子域有效,包括www
session.cookie_domain = .80tao.dev 

试下。


这个很奇怪啊,我好像没见过.dev的正式域名,有吗?

session.cookie_domain =80tao.dev

表示 session 只在 80tao.dev 域有效

所以需要也在这个域中测试你的代码

引用 24 楼  的回复:

session.cookie_domain =80tao.dev
把这个去掉就可以了
但是为什么啊


看命名还不清楚啊,,限制域啦
我是本地反问

我填写那个域为什么就不行了啊  默认是空的 为什么 给我解释一下吧
是我本地的虚拟主机 配置的虚拟域名

引用 26 楼  的回复:

那个是设置session对应的cookie在什么域有效的
你是本地测试么?是http://localhost这么去访问你的项目的么?是的话就去掉,如果是正式站点,你改成
PHP code
#注意加的那个点,表明所有子域有效,包括www
session.cookie_domain = .80tao.dev

试下。



这个很奇怪啊,我好像没……
怎么一说还真是,有点奇葩了,我也没见过dev的域名。

这个很奇怪啊,我好像没见过.dev的正式域名,有吗?
是我本地的虚拟主机 配置的虚拟域名

好吧 表示我不知道

これが古い投稿であることは承知していますが、私も最近この問題に遭遇しました。また、session_idは変更されず、ショッピングカートとして利用することはできません。次に、人為的に session_id("特定の値") を使用しましたが、セッションは期限切れになりません。ブラウザをどのように閉じても、前のセッションはまだ残っています。ここで誰かが私に答えてくれることを願っています。ありがとう

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート