0

これが PHP の正しい動作であるかどうかを誰かが説明できますか? session_start() が false を返し、session_name に不正な文字が含まれているという警告が表示されることを期待していました。

再現するコード:

<?php
session_name('m m');
var_dump(session_start());

if(!isset($_SESSION['count'])) {
     $_SESSION['count'] = 0;
}
else {
     $_SESSION['count']++;
}

echo session_name();
echo $_SESSION['count'];

一度実行します:

bool(true) m m0

ページをリロード:

bool(true) m m0

あるべきでした(セッションが機能していた場合):

bool(true) m m1

session_start()セッションが開始されたことを示す true を返します。は$_SESSION['count']機能しないことを示します。セッション名の不正な文字に関する警告はありません。

マニュアルページにはヒントも、セッションで有効な文字の定義も見つかりません。

4

2 に答える 2

5

PHP は次のようなものを生成します。

Set-Cookie: m+m=unttot9siteipcsrc0r064hn37; path=/

...そしてブラウザ(Firefox/23)はこれを送り返します:

Cookie: m+m=unttot9siteipcsrc0r064hn37

ここまでは順調ですね。しかし、PHP は新しいセッション ID を生成します。

Set-Cookie: m+m=7tmi7kd8n27ef3qdk5q706gk85; path=/

バグですか?セッション名が明らかに無効であるため、そうではないと思います:

セッション名は、Cookie や URL (PHPSESSID など) で使用されるセッションの名前を参照します。英数字のみを含める必要があります。短くてわかりやすいものにする必要があります (つまり、Cookie の警告が有効になっているユーザー向け)。name を指定すると、現在のセッションの名前がその値に変更されます。

警告

セッション名は数字のみで構成することはできません。少なくとも 1 つの文字が存在する必要があります。そうしないと、毎回新しいセッション ID が生成されます。

ルールに従えば、期待どおりに動作します。

session_name('mxm');

総括する:

  • 推測しないでください。ブラウザの開発者コンソールやその他のツールを使用してください
  • ドキュメントを読んでください;-)

編集:あなたがこれを言っていることに気づきました:

マニュアルページにはヒントも、セッションで有効な文字の定義も見つかりません。

session_name()のマニュアルページでその情報を見つけました。

于 2013-09-05T07:35:34.127 に答える