-
Problema $_SESSION
Salve, ho questo problema.. In un file di login registro una session chiamata username in questo modo:
Codice PHP:
$_SESSION['username'] = $username;
Poi in un altro file.php ho scritto questo per controllare che la sessione esista:
Codice PHP:
<?php
session_start();
if(!session_is_registered('username')){
echo 'Ciao Guest, benvenuto in <b>Suppliers</b>!';
} else {
$username = $_SESSION['username'];
echo 'Ciao, '.$username.', felici di rivederti :-)';
}
?>
Il problema è che non stampa a video nulla al posto di username, come mai?
Di solito dopo quanto (o quando) 'scade' una sessione?
-
session_is_registred() è deprecata!.
In questo caso, devi usare isset();
Ciao!
-
cioè così?
Codice PHP:
<?php
session_start();
if(!isset('username')){
echo 'Ciao Guest, benvenuto in <b>Suppliers</b>!';
} else {
$username = $_SESSION['username'];
echo 'Ciao, '.$username.', felici di rivederti :-)';
}
?>
-
no, così:
Codice PHP:
<?php
[...]
if(!isset($_SESSION['username'])){
[...]
?>
Ciao!
-
Ok, quindi anche così è giusto no?
Codice PHP:
<?php
session_start();
$username = $_SESSION['username'];
if(!isset($username)){
echo 'Ciao Guest, benvenuto in <b>Suppliers</b>!';
} else {
echo 'Ciao, '.$username.', felici di rivederti :-)';
}
?>
-
mmh, non tanto, perché nella seconda riga utilizzi $_SESSION['username'] senza essere certo che esista.
Ciao!
-
Adesso però ho un altro problema :S Prima la pagina login.php funzionava, ora è come se non ricevesse i dati dal form..
Codice PHP:
<form action="" method="post">
Username:<br />
<input type="text" name="username" id="username" placeholder="username" maxlength="15" onkeyup="vuoto('username','checkusername','validusername');" onblur="vuoto('username','checkusername','validusername');" /> <span id="validusername"></span><br />
<span id="checkusername" class="check"></span><br /><br />
Password:<br />
<input type="password" name="password" id="password" placeholder="password" maxlength="12" onkeyup="vuoto('password','checkpassword','validpassword');" onblur="vuoto('password','checkpassword','validpassword');" /> <span id="validpassword"></span><br />
<span id="checkpassword" class="check"></span><br /><br />
<input type="submit" class="submit" name="login" value="Login" /></form><br /><br />
<?php
include('settings.php');
$username1 = $_POST['username'];
$password1 = $_POST['password'];
$login = $_POST['login'];
if(isset($login)) {
if(empty($username1) || empty($password1)) {
echo '<span style="font-size: small; color: red; font-weight: bold;">Devi riempire entrambi i campi.</span>';
} else {
$da = array('<','>','"','\'');
$a = array('','','','');
$username = str_replace($da, $a, $username1);
$password2 = str_replace($da, $a, $password1);
$password = MD5($password2);
$sql="SELECT * FROM membri WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1) {
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
mysql_query("UPDATE membri SET ultimo_login=NOW() WHERE username='$username' AND password='$password'") or die (mysql_error());
header("location: login_success.php");
} else {
echo '<span style="font-size: small; color: red; font-weight: bold;">Dati errati.</span>';
}
}
}
?>
Se però sposto l' include dopo l' if mi da sempre dati errati.. settings.php contiene il collegamento al db
-
Hai inserito il sessio_start() vero?
e prova a modificare l'action in questo modo
Codice PHP:
action="<?php echo $_SERVER['PHP_SELF']; ?>"
-
session_start() nel login non l' avevo mai messo, forse perchè c'erano ancora i register() ormai deprecati.. Devo metterlo all' inizio dei codici php? O dove?
-
sì, prima di qualsiasi output:
Codice PHP:
<?php session_start(); ?>
<form action="" method="post">
[...]
Ciao!
-