2013-08-30 70 views
1

有我的劇本3頁 1. header.php中 2. auth.php 3. home.php記住我的代碼我的腳本PHP不工作

頭文件有登錄密碼和函數和數據庫連接在auth.php中。

現在登錄正在工作,唯一的是cookie,我的意思是我想知道如何在腳本中添加記住功能,請幫助。 這是我的代碼 1的header.php

include 'auth.php'; 
if(empty($_POST['submitlogin']) === false) 
{ 
$username = $_POST['username']; 
$password = $_POST['password']; 

if(empty($username) === true) 
    { 
     $errors[] = '<font color="#FFFFFF">You need to enter an username!</font>'; 

    } 

if(empty($password) === true) 
    { 

     $errors[] = '<font color="#FFFFFF">You need to enter password!</font>'; 
    } 

else if(user_exists($username) === false) 
    { 

     if(empty($username) === true){} 
     else 
     $errors[] = '<font color="#FFFFFF">No such username has been found.</font>'; 
    } 

else if(user_active($username) === false) 
    { 

     $errors[] = '<font color="#FFFFFF">You haven\'t activated your account.</font>'; 
    } 
else 
    { 

    $login = login($username, $password); 
    if($login === false) 
    { 
     $errors[] = '<font color="#FFFFFF">The Username/Password Combination is incorrect</font>'; 
    } 
    else 
    { 
     $_SESSION['user_id'] = $login; 
     header('Location: home.php'); 
     exit(); 
    } 
    } 
} 

2. auth.php代碼

session_start(); 
error_reporting(0); 

require 'connect.php'; 


if(logged_in() === true){ 

    $session_user_id = $_SESSION['user_id']; 
    $user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'email', 'active', 'type'); 


    if(user_active($user_data['username']) === false) 
    { 
     session_destroy(); 
     header('Location: home.php'); 
     exit(); 
    } 

     }else{ 

     } 

    $errors = array(); 


    function user_data($user_id) 
    { 
    $data = array(); 
    $user_id = (int)$user_id; 

    $func_num_args = func_num_args(); 
    $func_get_args = func_get_args(); 

    if($func_num_args > 1) 
    { 
    unset($func_get_args[0]); 

    $fields = '`' . implode('`, `', $func_get_args) . '`'; 
    $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `edge_users` WHERE `user_id` = $user_id")); 
    return $data; 
    } 
    } 


    function user_active($username) 
    { 
    $username = sanitize($username); 
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `edge_users` WHERE `username` = '$username' AND `active` = 1"), 0)==1)?true: false; } 



    function login($username, $password) 
    { 
    $user_id = user_id_from_username($username); 
    $username = sanitize($username); 
    $password = md5($password); 
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `edge_users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $user_id : false; 
     } 

HTML表單

<form method="post"> 
    Username 
    <input type="text" name="username" style="padding: 5px; width:228px; height:15px;" autocomplete="off" value="<?php echo $_POST['username'];?>"/>>   
    Password 
    <input type="password" name="password" style="padding: 5px; width:228px;height:15px;" />                  
    <input type="checkbox" name="rememberme" /> Remember Me 

    <input type="submit" name="submitlogin" style="background: #00c800; border:1px solid #00c800; color:#FFFFFF; padding:5px 10px 5px 10px; font-size:14px; float: right;" value="Login" /> 
    </form> 
+0

如果您想要更多控制權,請使用'$ _COOKIE'或'setcookie'。 – Halcyon

+0

你能指導我在哪裏使用? – razor

+0

你在哪裏設置'$ _SESSION'就是你可以設置cookie的地方。附: Stackoverflow是針對問題,而不是代碼請求。 –

回答

0

因爲你正在使用PHP會話,你需要延長會議。

$_SESSION['user_id'] = $login; 

後添加以下行:

if (isset($_POST['rememberme'])) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), $_COOKIE[session_name()], time() + 60*60*24*30, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); 
} 

如果還記得我按下按鈕這將延長30天的PHP會話cookie。

在註銷你可能想是這樣的:

$_SESSION = array(); 
$params = session_get_cookie_params(); 
setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); 
session_destroy(); 

這會破壞你的PHP會話,所以如果有人檢查「記住我」,並註銷,然後重新登錄,無需按「記住我」你不記得他們。