0

セッションと Cookie の両方を使用する php ログイン スクリプトを作成しました。ブラウザを閉じた後にセッションが期限切れになることは知っていますが、Cookie は有効期限に達するまで存在します。私のスクリプトでは、ログインしたユーザーの「ユーザー名」を保存するための COOKIE を作成しました。ログイン後、ブラウザを閉じて再度開くと、Cookie のためにログインしたままにしておく必要があります。[ログアウト] をクリックすると、ログアウトする必要があります。しかし、「ログアウト」ボタンのリンクをクリックした後、スクリプトがログアウトしないため、スクリプトが正しく機能しません。

私が書いたphpコードは次のとおりです。

    <?php
session_start();
require_once('login/connectvars.php');
    if(!isset($_SESSION['username']) && isset($_COOKIE['username']))
{
    $_SESSION['username'] = $_COOKIE['username'];
}

if(isset($_POST['submit']))
        {
          if(!empty($_POST['username']) && !empty($_POST['password']))
          {
            $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
            $username = mysqli_real_escape_string($dbc,trim($_POST['username']));
            $password = mysqli_real_escape_string($dbc,trim($_POST['password']));

            $query = "SELECT user_id,username FROM users_dns WHERE username = '$username' AND password = SHA('$password')";
            $data = mysqli_query($dbc,$query) or die(mysqli_error($dbc));
            if(mysqli_num_rows($data) == 1)
            {
                $row = mysqli_fetch_array($data);
                $_SESSION['user_id'] = $row['user_id'];
                $_SESSION['username'] = $row['username'];
                setcookie('username',$row['username'],time() + (60 * 60));
                echo 'success';
                mysqli_close($dbc);
            }    
            else
            {
                echo 'enter correct username and password';
            }
         }
        else
        {
            echo 'no empty fields please..';
        }
      }

?>

これが私がhtmlコードで使用したものです:

<?php
       if(isset($_SESSION['username']))
       {
         echo 'logged in as'.$_SESSION['username'];
         echo '<a href="login/logout.php">log out ('.$_SESSION['username'].')</a><br />';
         echo $_SESSION['username'];
       }
       else
       {
       ?>
       <div id="login_form">

        <!--<span class="error"><?php echo $error_msg; ?></span>-->
         <form id="login"  method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <table>
                  <tr>
                     <th>Username:</th>
                     <th>Password:</th>
                  </tr>
                  <tr>
                     <td><input type="text" name="username" /></td>
                     <td><input type="password" name="password" /></td>
                   </tr>
                   <tr>
                      <td><input type="submit" name="submit" value="Log In" class="submit" /></td>
                      <td><a href="login/signup.php"><input type="button" class="submit" value="Sign Up" /></a></td>
                   </tr>
            </table>
         </form>
       </div>
       <?php
       }
       ?>

ここに私のログアウトスクリプトがあります

    <?php
session_start();

if(isset($_SESSION['username']))
{
    $_SESSION = array();

if(isset($_COOKIE['session_name()']))
{
    setcookie('username','',time() - 3600);
}
session_destroy();
}
setcookie('user_id','',time() - 3600);
setcookie('username','',time() - 3600);

echo 'redirecting you...please wait..';
header("Refresh: 3;url=http://localhost/");
?>
4

1 に答える 1

1
if(isset($_COOKIE['session_name()']))

これはあるべきです

if(isset($_COOKIE['username']))

Cookieを作成usernameし、Cookie をチェックしているためですsession_name()

于 2013-01-24T11:50:45.260 に答える