2012-04-10 18 views
29

Ho appena finito di creare un intero login e registrare systsem in PHP, ma il mio problema è che non ho ancora utilizzato alcuna sessione. Sono una specie di principiante in PHP e non ho mai usato sessioni prima. Quello che voglio fare è, dopo che l'utente registra e compila il modulo di login, rimarranno comunque sulla stessa pagina. Quindi, ci sarà una parte di ciò che sarà se la sessione è loggata e l'altra parte sarà un'altra (l'utente non ha effettuato l'accesso in modo da visualizzare il modulo di login). Qualcuno può dirmi come iniziare?Utilizzo di sessioni e variabili di sessione in uno script di accesso PHP

+2

"Se si può immaginare un intero libro che risponde alla tua domanda, si sta chiedendo troppo. " - [Domande frequenti StackOverflow] (http://stackoverflow.com/faq) Per chiarire, la tua domanda è troppo ampia. – orourkek

+0

Nulla che non sia mai accaduto prima. Controlla [documentazione della sessione di php.net] (http://www.php.net/manual/en/book.session.php), questo è un ottimo punto di partenza:] – orourkek

+0

Guarda anche questo http: // www. phpro.org/tutorials/Introduction-To-PHP-Sessions.html –

risposta

65

Spero che questo aiuti :)

inizia la sessione, è necessario dire questo nella parte superiore di una pagina o prima di chiamare codice di sessione

session_start(); 

mettere un ID utente nella sessione per tenere traccia che viene registrato nel

$_SESSION['user'] = $user_id; 

Verificare se qualcuno è loggato

if (isset($_SESSION['user'])) { 
    // logged in 
} else { 
    // not logged in 
} 

Trova il login ID utente

$_SESSION['user'] 

Quindi sulla tua pagina

<?php 
session_start(); 


if (isset($_SESSION['user'])) { 
?> 
    logged in HTML and code here 
<?php 

} else { 
    ?> 
    Not logged in HTML and code here 
    <?php 
} 
+1

codice buono, semplice e leggibile. Semplicemente perfetto – IchHabsDrauf

8

In primo luogo, la documentazione di PHP ha qualche excellent information su sessions.

In secondo luogo, è necessario un modo per memorizzare le credenziali per ogni utente del tuo sito web (ad esempio un database). È una buona idea non archiviare le password come testo normale non leggibile, non crittografato. Quando si memorizzano le password, è necessario utilizzare la funzione di hashing di PHP crypt(). Ciò significa che se tutte le credenziali sono compromesse, le password non sono pronte per il.

maggior parte dei sistemi di log-in saranno hash/cripta la password di un utente immette poi confrontare il risultato con l'hash nel sistema di storage (ad esempio database) per il corrispondente nome utente. Se l'hash della password inserita corrisponde all'hash memorizzato, l'utente ha inserito la password corretta.

È possibile utilizzare le variabili di sessione per archiviare informazioni sullo stato corrente dell'utente, ovvero se hanno effettuato l'accesso o meno e, se lo sono, è possibile anche memorizzare l'ID utente univoco o qualsiasi altra informazione necessaria immediatamente.

per avviare una sessione di PHP, è necessario chiamare session_start(). Allo stesso modo, per distruggere una sessione ei suoi dati, è necessario chiamare session_destroy() (ad esempio, quando l'utente si disconnette):

// Begin the session 
session_start(); 

// Use session variables 
$_SESSION['userid'] = $userid; 

// E.g. find if the user is logged in 
if($_SESSION['userid']) { 
    // Logged in 
} 
else { 
    // Not logged in 
} 

// Destroy the session 
if($log_out) 
    session_destroy(); 

Auspico inoltre che si dà un'occhiata a this. Ci sono alcune informazioni buone e facili da seguire sulla creazione di un semplice sistema di accesso.

+0

PHP 5.5 ha introdotto [funzioni di hashing della password] (http://php.net/manual/en/ref.password.php) (con codice di compatibilità 5.3.7 disponibile) che dovrebbe essere usato per la generazione e la convalida dell'hash della password. Queste funzioni eliminano gli errori che indeboliscono la sicurezza che alcuni programmatori potrebbero fare quando usano 'crypt()' o altre funzioni di hashing generali di PHP. Per i dettagli sul perché usare password_hash() invece di crypt(), vedi [rfc: password_hash] (https://wiki.php.net/rfc/password_hash) –

+0

Il link in fondo alla tua risposta (questo) è rotto adesso. Puoi fornire un permalink per questa risorsa? – dmcgill50

4

Faccio sempre OOP e uso questa classe per mantenere la sessione in modo da poter utilizzare la funzione is_logged_in per verificare se l'utente è connesso o meno, e se non lo si fa come si desidera.

<?php 
class Session 
{ 
private $logged_in=false; 
public $user_id; 

function __construct() { 
    session_start(); 
    $this->check_login(); 
if($this->logged_in) { 
    // actions to take right away if user is logged in 
} else { 
    // actions to take right away if user is not logged in 
} 
} 

public function is_logged_in() { 
    return $this->logged_in; 
} 

public function login($user) { 
// database should find user based on username/password 
if($user){ 
    $this->user_id = $_SESSION['user_id'] = $user->id; 
    $this->logged_in = true; 
    } 
} 

public function logout() { 
unset($_SESSION['user_id']); 
unset($this->user_id); 
$this->logged_in = false; 
} 

private function check_login() { 
if(isset($_SESSION['user_id'])) { 
    $this->user_id = $_SESSION['user_id']; 
    $this->logged_in = true; 
} else { 
    unset($this->user_id); 
    $this->logged_in = false; 
} 
} 

} 

$session = new Session(); 
?> 
+1

Grazie, è un buon punto di partenza, ma dovresti espandere la tua classe per l'autenticazione utente con e-mail;) –

17

questo è il codice di sessione più semplice che utilizza php. Stiamo usando 3 file.

login.php

<?php session_start(); ?> // session starts with the help of this function 

<?php 

if(isset($_SESSION['use'])) // Checking whether the session is already there or not if 
           // true then header redirect it to the home page directly 
{ 
    header("Location:home.php"); 
} 

if(isset($_POST['login'])) // it checks whether the user clicked login button or not 
{ 
    $user = $_POST['user']; 
    $pass = $_POST['pass']; 

     if($user == "Ank" && $pass == "1234") // username is set to "Ank" and Password 
     {         // is 1234 by default  

      $_SESSION['use']=$user; 


     echo '<script type="text/javascript"> window.open("home.php","_self");</script>';   // On Successful Login redirects to home.php 

     } 

     else 
     { 
      echo "invalid UserName or Password";   
     } 
} 
?> 
<html> 
<head> 

<title> Login Page </title> 

</head> 

<body> 

<form action="" method="post"> 

    <table width="200" border="0"> 
    <tr> 
    <td> UserName</td> 
    <td> <input type="text" name="user" > </td> 
    </tr> 
    <tr> 
    <td> PassWord </td> 
    <td><input type="password" name="pass"></td> 
    </tr> 
    <tr> 
    <td> <input type="submit" name="login" value="LOGIN"></td> 
    <td></td> 
    </tr> 
</table> 
</form> 

</body> 
</html> 

home.php

<?php session_start(); ?> 

<html> 
    <head> 
     <title> Home </title> 
    </head> 
    <body> 
<?php 
     if(!isset($_SESSION['use'])) // If session is not set then redirect to Login Page 
     { 
      header("Location:Login.php"); 
     } 

      echo $_SESSION['use']; 

      echo "Login Success"; 

      echo "<a href='logout.php'> Logout</a> "; 
?> 
</body> 
</html> 

logout.php

<?php 
session_start(); 

    echo "Logout Successfully "; 
    session_destroy(); // function that Destroys Session 
    header("Location: Login.php"); 
?> 
0
//start use session 

$session_start(); 

extract($_POST);   
//extract data from submit post 

if(isset($submit)) 
{ 

if($user=="user" && $pass=="pass") 

{ 

$_SESSION['user']= $user; 

//if correct password and name store in session 

} 
else { 

echo "Invalid user and password"; 

header("Locatin:form.php"); 

} 

if(isset($_SESSION['user'])) 

{ 

//your home page code here 

exit; 
} 
+0

BTW, dovresti fare hash e salare la password su questo. Quindi hash e salate l'input per il confronto. –

0

è necessario iniziare la sessione nella parte superiore di una pagina o prima di chiamare codice di sessione

session_start(); 
-2
$session_start(); 

extract($_POST);   
//extract data from submit post 

if(isset($submit)) 
{ 

if($user=="user" && $pass=="pass") 

{ 

$_SESSION['user']= $user; 

//if correct password and name store in session 

} 
else { 

echo "Invalid user and password"; 

header("Locatin:form.php"); 

} 

if(isset($_SESSION['user'])) 

{ 

//your home page code here 

exit; 
} 
Problemi correlati