【发布时间】:2013-09-06 10:27:29
【问题描述】:
我正在研究一本书,它创建了这个用于销毁会话的函数:
function destroy_session_and_data()
{
session_start();
$_SESSION = array();
if (session_id() != "" || isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time() - 2592000, '/');
session_destroy();
}
我想知道条件语句是否过长?
能不能改写成下面这样:
if (session_id() != "" || isset(session_name()))
也就是说,session_name() 不是在不需要特定引用 $_COOKIE 数组的情况下返回值“PHPSESSID”吗?
再进一步,条件语句不可以这样写吗:
if (session_id() != "")
看到 session_id() 返回 $_COOKIE 数组中键 [PHPSESSID] 的 VALUE,如果它不为空,那么肯定会设置返回 KEY [PHPSESSID] 的 session_name() , 因为它们在 $_COOKIE 数组中作为名称/值对一起存在?
为任何帮助干杯!
【问题讨论】:
-
@Deepanshu:为什么?只有两个字符串值可以通过
isset但失败!empty(''和'0')并且它们都不能用作会话名称。 -
@Jon 你是对的,我猜它只是让它更加防错,我也总是对此感到困惑!好吧@Nathan stackoverflow.com/questions/7191626/isset-and-empty-what-to-use这个链接可能会清除一些东西
-
@Deepanshu:手册足以解释
empty的工作原理,这里应该没有混淆。您建议将if (x)更改为if (x && true),这显然是多余的。 -
@Jon 放置 !empty ('') 并不是多余的,因为谁知道呢,它可能会被设置为空白/空/或某个地方的空格......我总是喜欢两者
-
@Deepanshu:“因为谁知道”? 手册知道,它告诉那些阅读它的人。
标签: php if-statement session-cookies