2013-08-30 1 views
1

Il y a 3 pages dans mon script 1. header.php 2. auth.php 3. home.phpSe souvenir de moi le code ne fonctionne pas dans mon script php

Le fichier d'en-tête a le code de connexion et la les fonctions et les connexions à la base de données se trouvent dans auth.php.

Maintenant la connexion fonctionne, la seule chose est cookie, je veux dire, je veux savoir comment ajouter une fonction de rappel dans le script s'il vous plaît aider. Ce est mon code 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. Code 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; 
     } 

Formulaire 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

Utilisez '$ _COOKIE' ou' setcookie' si vous voulez plus de contrôle. – Halcyon

+0

Pourriez-vous s'il vous plaît me guider où utiliser? – razor

+0

Où vous définissez '$ _SESSION' est où vous pouvez également définir le cookie. P.s. Stackoverflow est destiné aux questions, pas aux demandes de code. –

Répondre

0

Parce que vous utilisez les sessions PHP dont vous avez besoin pour prolonger la session.

Après

$_SESSION['user_id'] = $login; 

Ajoutez les lignes suivantes:

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"]); 
} 

Cela prolongera le cookie de session PHP de 30 jours si le souvenir me touche est enfoncée.

Sur logout Vous voulez probablement quelque chose comme ceci:

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

Cela va détruire votre session PHP, donc si quelqu'un a coché la case « Se souvenir de moi » et billots puis se connecte à nouveau sans appuyer sur « Se souvenir de moi » tu ne te souviens pas d'eux.

Questions connexes