php - 以正确的方式取消设置会话
问题描述
我试图使用会话变量将错误消息传递到另一个页面。在处理程序页面上,会话以以下方式初始化:
function sess() {
$index = $_POST['name'];
$_SESSION['error'] = ($index == '') ? 'name cannot be empty' : $index . " is a good name";
header("Location: http://website-name.com/form");
}; sess();
在另一页上是这样的:
if(isset($_SESSION['error'])) {
echo $_SESSION['error']; unset($_SESSION['error']);
};
现在,如果提交的表单带有一个空字段,则错误name cannot be empty
将成为会话的值。之后,如果名称被设置,会话的值不会改变但仍然返回name cannot be empty
。
我检查了它是否与在函数中调用会话这一事实有关。不知道!但在网上找到了一种使用 session_unset 取消设置所有变量的方法。但它实际上是我想要取消设置的一个会话变量,我发现了类似session_unset($_SESSION['error'])
. 但是,使用它并没有取消设置所有会话,而是在$_SESSION['error']
函数中不再设置,除非我使用unset($_SESSION['error'])
不会终止设置的第一个会话。
那么实际上出了什么问题呢?工作方式有何unset_session()
不同unset()
?它与在函数内部有什么关系?据我所知,$_SESSION[]
它是一个全局变量,就像$GLOBALS[]
可以在任何范围内访问一样。
解决方案
推荐阅读
- fortran - 带有 libcuba 的 Fortran 回溯错误消息
- java - Firestore 集合到自定义 ListView
- matplotlib - High Sierra 上的 Matplotlib 2.2.2 安装错误
- c# - 调用控制 - 复制文件阻塞另一个线程
- javafx - 在 Java 9 或 10 中创建 FXML 成员的正确方法是什么?
- javascript - Javascript PHP 中基于时间的代码执行
- kdb - kdb - 获取 n 天前的列值
- javascript - 页面加载时自动打开后无法关闭fancybox
- python - Django - 计算 created_at 和 done_at 之间的平均时间
- serialization - Ember 根据查询模型更改 normalizeResponse