我有这个简单的会话类
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();
}
}
在我的其他课程中
public function verifyFormToken($form)
{
// check if a session is started and a token is transmitted, if not return an error
if(!isset(Session::get($form.'_token'))){
return false;
}
// check if the form is sent with token in it
if(!isset($data['token'])) {
return false;
}
// compare the tokens against each other if they are still the same
if (Session::get($form.'_token') !== $data['token']) {
return false;
}
return true;
}
我可以设置会话没问题但是当我使用verifyFormToken()
来获取它时,我收到此错误消息
在写上下文中不能使用函数返回值
指向此行
if(!isset(Session::get($form.'_token'))){
答案 0 :(得分:2)
您必须将变量定义为传递给isset:
$token = Session::get($form.'_token');
if ($token !== NULL) { ... }
或者在get方法中使用isset时,只需执行以下操作:
if (Session::get($form.'_token') !== NULL) { ... }
编辑**
在这种情况下,这很好,因为会话令牌永远不会为null,但作为会话控制器,值可能会故意设置为NULL,或者可能未设置,因此get方法需要返回唯一值以确定其是否设置。即。
define('MY_SESSION_NOT_SET',md5('value_not_set'));
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];
else
return MY_SESSION_NOT_SET;
}
public static function destroy() {
unset($_SESSION);
session_destroy();
}
}
if (Session::get($form.'_token') === MY_SESSION_NOT_SET) { ... }
这样的事情会更有益。