【发布时间】:2012-06-29 17:24:20
【问题描述】:
我建立了一个网站,它有一个登录表单,当用户登录时,登录表单不会出现,而是会出现一个退出
我的问题是当用户退出会话时不会破坏
当用户登录时,我进入功能运行,当用户退出时,我进入功能退出
HTML
<?php
Session::init();
$l = Session::get('loggedIn');
if (isset($l) && $l==true) {
?>
<a href="<?php echo URL; ?>login/signout" class="smallLink">sign out</a>
<?php
} else {
?>
<a href="login/run">Sign in</a>
<br/>
<form action="<?php echo URL;?>login/run" method="POST">
<div class="staticSignin">
phoneNumber
password
</div>
<div id="userInputSignin">
<input type="text" name="MNumber"/>
<input type="password" name="password"/>
<input type="image" src="http://localhost/Mar7ba/public/images/signinButton.png"/>
</div>
</form>
<?php
}
?>
运行登录
Session::init();
$row = $sth->fetch();
$ID = $row['ID'];
$rollID = $row['rollID'];
Session::set('loggedIn', true);
Session::set('ID', $ID);
Session::set('roolOfUser', $rollID);
退出
public function signout() {
Session::set("loggedIn", false);
Session::destroy();
$this->view->render('index/index');
}
会话类
<?php
class Session {
public static function init() {
session_start();
}
public static function set($key, $value) {
@$_SESSION[$key] = $value;
}
public static function get($key) {
if (isset($_SESSION[$key]))
return $_SESSION[$key];
}
public static function destroy() {
unset ($_SESSION);
session_destroy();
}
}
退出时,登录表单不出现
【问题讨论】:
-
而不是使用 unset ($_SESSION);尝试 session_unset();
-
@MrD 我试过了,还是出现退出按钮,登录表单没有出现
-
打印出 $_SESSION 变量,看看你得到了什么?你应该使用 session_unset();始终避免与全局变量有关的问题,而不是未设置 ($_SESSION)
-
当我尝试回应它时,我有这个异常
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\xampp\htdocs\Mar7ba\libs\Session.php on line 21,也许这次出现异常是因为我在销毁会话后退出 -
@MrD 现在当我从 html 代码中删除 Session::init() 时,登录表单总是出现并且退出按钮永远不会出现