0

短い: 何らかの理由で、Cookie '_sid' が一部のブラウザー/コンピューターによって取得されていません。Long: 使用しているファイルが 3 つあります。/index.php、/scripts/login.php、および /iframes/register.php。ログイン情報が入力されると、一連の標準的な処理が行われ、ユーザーがログインします。「_sid」と呼ばれる Cookie が設定され、値が mySQL テーブルに保存されます。

login.php:

setcookie("_sid", $sid, 0, '/'); ?>

現在、すべてのコンピューターがこの Cookie を取得しています。15 以上のコンピューターでテストしましたが、すべて合格しました。クッキーの設定方法をお見せしたかっただけです。

問題は index.php にあります:

<?php
$username="x"; $password="y"; $database="z";
mysql_connect(localhost,$username,$password);

@mysql_select_db($database) or die( "Unable to select database");
$loggedin=false; $team="none";
if(isset($_COOKIE['_sid'])){  //error happens here
    print_r("test");
    $session_id=$_COOKIE['_sid'];

コメント行でエラーが発生するようになりました。isset は false を返します。通常、これはある種の有用な指標になります。でも...

3 番目のファイル register.php は、ユーザーが他のユーザーを登録できるようにします (関係ありません)。注意すべき重要なことは、ファイルの先頭がindex.php とまったく同じであることです。

<?php
$username="x"; $password="y"; $database="z";
mysql_connect(localhost,$username,$password);

@mysql_select_db($database) or die( "Unable to select database");
$loggedin=false; $team="none";
if(isset($_COOKIE['_sid'])){
    print_r("test");
    $session_id=$_COOKIE['_sid'];

ただし、このファイルは機能します。そうです、issetは機能します。このファイルは、すべての 15/15 コンピューターでも機能します。

これをさらに混乱させるために、index.php は 15 台のコンピューターのうち約 10 台で動作します。このエラーは常に mac (chrome、ff、safari) および Linux (ff テスト済みですが、chrome も想定するのが適切です) で発生します。ほとんどのウィンドウで動作します (クロムを使用した 7 + 8、ff)。ただし、同一のツイン コンピューター (ゴースト OS 上) を使用すると、1 台のコンピューターが動作し、もう 1 台は (ff を使用して) 失敗しました。

私はこの問題に2日間悩まされてきましたが、どうすればいいのか本当にわかりません...

4

1 に答える 1

0

Cookieを設定すると、ブラウザは同じドメインへの新しいリクエストのヘッダーを追加します。

login.phpが、同じリクエストではなく、index.phpの前にブラウザによって呼び出されていることを確認する必要があります。

  1. login.php-ブラウザはCookieを送信しませんが、設定のリクエストを受け取ります
  2. index.php-ブラウザがCookieを送信します

index.phpにある場合

<include "login.php">

これは間違いなく機能しません。

于 2013-02-27T09:15:12.113 に答える