我在php会话处理中遇到了一个问题,我无法向自己解释。我正在从头开始学习php,我不知道如何实现一个会话的实况:
这是我的索引页面,用户可以登录或注册到访问正确页面的数据库,然后返回查看他是否已登录:
代码:
Index
<?php session_start(); ?>
<a href="register.php" target="_self"> Register </a>
<a href="login.php" target="_self"> Login </a>
<?php
if(isset($_SESSION['login']))
{
echo "Logged as: ".$_SESSION['nlogin'];
?>
<form method="post" action="<?php unset($_SESSION['login']) ?>">
<input type="button" name="logOut" value="LogOut" />
</form>
<?php
}
else
{
echo "Please Register or Login";
}
?>事实上,这是因为当我从login.php回来时,上面写着“登录为: Admin”
但是,当我单击链接以获取登录页面,或者再次从索引页面注册页面时,我应该得到相同的消息,"Logged as.“,但是会话似乎被关闭了。:(
这里是login.php:
<?php
session_start();
include "dbConnect.php";
if(isset($_SESSION['login']))
{
echo "Logged as: ".$_SESSION['nlogin']; // IT NEVER SHOW THIS MESSAGE
}
if(isset($_POST['submit']) &&(trim($_POST['submit']) == "Login"))
{
if(!isset($_POST['user']) || $_POST['user']=="")
{
echo "Attenzione inserire l'username.";
}
elseif(!isset($_POST['pwd'])||$_POST['pwd']=="")
{
echo "Attenzione inserire la password.";
}
else
{
$u = trim(filter_var($_POST['user'], FILTER_SANITIZE_STRING));
$u = str_replace(" ","_",$u);
$p = trim(filter_var($_POST['pwd'], FILTER_SANITIZE_STRING));
$p = sha1($p);
$istance = new dbHandle;
$istance->connect();
$data = $istance->query("SELECT * FROM login WHERE username_login = '$u' AND password_login = '$p'");
if(mysql_num_rows($data) == 0)
{
echo "Failed";
echo "<a href='index.php' target='_self'> Go Back </a>";
}
else
{
echo "Logged";
$res = $istance->getdata($data);
$_SESSION['login'] = $res->id_login;
$_SESSION['nlogin'] = $res->username_login;
echo "<a href='index.php' target='_self'> Go Back </a>";
}
}
}
else
{
?>
Login
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
...
<input name="user" type="text" size="20" required="required"/>
...
<input name="pwd" type="password" size="20" required="required"/>
...
<input type="submit" name="submit" value="Login"/>
</form>
<form method="post" action="<?php unset($_SESSION['login']) ?>">
<input type="button" name="logOut" value="LogOut" />
</form>
<?php
}
$istance->disconnect();
?>当我使用上面的链接返回到索引页面时,它显示为.但当我再回来的时候,就不会了。
所以我假设我的疗程是自动销毁的?但是为什么呢?
谢谢,谢谢你的帮助。
我忘了说PHP.ini
session.cookie_lifetime
设置为"0“
谢谢
发布于 2012-01-24 11:05:35
你给unset($_SESSION['login'])打了很多次电话。它移除您的登录:
<form method="post" action="<?php unset($_SESSION['login']) ?>">试试这个:
<form method="post" action="index.php">
<input type="button" name="logOut" value="LogOut" />
</form>
<? if (isset($_REQUEST['logOut'])){ session_destroy(); } ?>发布于 2012-01-24 11:04:45
取消会话,如下所示
if(isset($_REQUEST['logOut']))
{
unset($_SESSION['login']);
}发布于 2012-01-24 10:55:20
你去查一下if(isset($_SESSION['login']))。如果这导致了true,那么您可以使用<form method="post" action="<?php unset($_SESSION['login']) ?>">
注意unset($_SESSION['login'])部分-在此之后,if(isset($_SESSION['login']))将返回false。
https://stackoverflow.com/questions/8985345
复制相似问题