php SESSION用法 $_SESSION['']初始值

首页用SESSION判断并保持用户登录状态。 $_SESSION['a'] 如果没有赋值就拿来做IF判断是否可行?$_SESSION['a']的值此时是多少?
<?php
if(!$_SESSION['flag']){
$msg=$_SESSION['flag'];
echo ".$msg";
?>
<form action="load.php" method="post" >
<table width="270" border="0" cellpadding="5" bgcolor="#eeeeee">
<tr>
<td width="20%">帐号:</td>
<td width="80%"><input name="username" type="text" id="username"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="pwd" type="password" id="pwd"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登录" name="submit"/>
</td>
</tr>
<?php
if($_SESSION['pwflag']){echo"账号密码错误";}
?>
</table>
<p>
<?php
}else{
?>
</p>
<form >
<table width="270" border="0" cellpadding="5" bgcolor="#eeeeee">
<tr>
<?php
echo "欢迎您登陆:". $_SESSION['username'];
$datatime=date('Y-m-d H:i:s',time());
echo '<br/>';
echo "本次登陆时间:".$datatime;
?>
</tr>
<p><a href="loadout.php">注销</a></p>
</table>
<?php }
?>

注意,在使用session之前一定要调用

<?php
session_start();

开始会话,否则会出错。在你的代码里我看不到。


$_SESSION数组的使用类似于普通数组。但它是有”魔法“的。当页面结束后,$_SESSION的内容会被PHP解析器自动保存下来,同时在用户的浏览器留下一个cookie。下次用户访问时,使用该cookie继续会话。


所以,检查一个session是否存在和普通数组一样:

<?php
// 正确,检查flag下标是否设置
if (isset($_SESSION['flag'])) ...
// 错误,会导致警告,下标不存在
if ($_SESSION['flag']) ...
// 存储一个session值
$_SESSION['flag'] = 1;
// 删除一个session值
unset($_SESSION['flag']);

 一个没有设置的session是没有初始值的。就像你初始化一个空数组一样。

追问

我给出的是一部分代码...所以你没看到session启动...
我的想法是在一个界面上判断,如果未登陆显示登录匡,如果登录了就显示用户名和注销
我采用了判断$_SESSION的方法。$_SESSION[的初始值没给就直接判断了,不清楚这里该怎么修改。
注销界面使用了session_destroy();,cookie应该清空了吧

追答<?php
session_start();
if (isset($_SESSION['flag']) && $_SESSION['flag']) {
    // 我登陆了
} else {
    if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
        // 登陆逻辑
        // 如果登陆成功
        $_SESSION['flag'] = 1
    } else {
        // 打印登陆框
    }
}

 如果使用了session_destroy(),不会影响cookie,但session的内容被删除了。cookie中存储的session id自然也变成无效的。

一般要这么做

<?php
session_unset();
session_destroy();

温馨提示:答案为网友推荐,仅供参考