0

私は過去3時間問題に悩まされており、PHPセッションに関して私を精神的に駆り立てています。Ivはsession_is_registeredから$_SESSIONに移動しましたが、機能したくありません。

以下のコードを参照してください(ログインで保護したいページの最上部にあるすべてのファイルにあります):

    <?php

     session_start();

     if(!isset($_SESSION['user']))
         header("location: login.php");

    ?>

別のページaccess.phpに、2つの入力ボックスと送信ボタンを備えたフォームがあり、入力を確認してdbと相互参照します。間違った値を入力すると、正しい「無効なログイン」というメッセージが表示されます。しかし、正しい詳細を入力すると、login.phpページに戻ってログインを要求します。

私はセッションを保存し、次のように詳細を確認しています。

    <?php
    session_start();
    include("dbfile.php");

    $sql = mysql_query("SELECT id FROM myTable WHERE user=$username AND pass=$pass");

    if(mysql_num_rows($sql)==1){

             $_SESSION['user'] = "Test";
             header("location: account.php");
    }else{

             header("location: login.php");      
    }
     ?>

残念ながら、register_globalsがオフになっている共有サーバーを使用していますが、それが問題かどうかはわかりません。セッションの出力を他のページにエコーすると、何も得られません。セッションの登録/保存すらしないように。

ブラウザでcookies/jsを有効にしています。実際、私は4つのブラウザーでテストしましたが、同じ結果になりました。誰がこれで命の恩人になるのか。

4

4 に答える 4

0

試してみ$_POST['username']$POST['pass']、クエリで変数$usernameとがオフになって$passいる場合は存在しません。register_globals(どちらにするべきか。)

セッションが機能しているかどうかを確認したい場合は、次のことを試してください。

<?php
    session_start();
    var_dump($_SESSION);
    $_SESSION['works'] = 'yes';
?>

2番目のページビューで、画面に結果が表示されるはずです。:)

于 2012-05-11T18:09:26.627 に答える
0

これを試してくださいクエリでurusinvariableを使用し、データ型が整数の場合は、「。$variable_name」と記述する必要があります。変数がデータ型がvarcharの場合、「'。$varable_name。'」のように記述する必要があります。

<?php
    session_start();
    include("dbfile.php");

    $sql = mysql_query("SELECT id FROM myTable WHERE user="'.$username.'" AND pass="'.$pass.'" ");

    if(mysql_num_rows($sql)==1){

             $_SESSION['user'] = "Test";
             header("location: account.php");
    }else{

             header("location: login.php");      
    }
     ?>
于 2012-05-11T18:18:25.563 に答える
0

これを試して

$sql = mysql_query("SELECT id FROM myTable WHERE user='$username' AND pass='$pass'");

if(mysql_affected_rows()>0){

         $_SESSION['user'] = "Test";
         header("location: account.php");
}else{
         // die(mysql_error()); use this if you think maybe there is an error
         header("location: login.php");      
}
于 2012-05-11T18:29:59.900 に答える
0

phpセッションがサイトのすべてのページで機能しないなどの問題が発生した場合は、ここで心配する必要はありません。問題が以前にサイトで発生した問題と一致していれば、問題を簡単に解決できます。

したがって、ログインページでセッションを次のように開始したとします...

session_start();
$_SESSION['islogin'] = 'true';

ただし、「islogin」セッションは、いくつかのページを除くすべてのページで機能しているわけではありません。URLに問題がある可能性があります。URLに「www」が含まれていることを確認してください。そうでない場合は、URLに「www」を追加して再試行してください。htaccessファイルを使用してURLに「www」を追加する場合は、以下を試してください。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

これらの3行のコードを.htaccessファイルに追加します。

この変更で問題が解決する可能性があります。

于 2014-02-21T07:19:37.173 に答える