我有一个我希望在页面之间保留的变量。我已经尝试使用POST设置它,当它不起作用时,我使用了SESSION。但无论如何,当我进入新页面时,变量就会丢失。
以下是设置变量时的代码:
myMemo f x = gets (Map.lookup x) >>= maybe y' return
where
y' = mapState (\(y, map) -> (y, Map.insert x y map)) $ f x
就像调试测试一样,我用这一行来检查它是否仍然存在:
$_SESSION['filename'] = $boardName;
$debug->alert_code_info($_SESSION['filename']);
您可以在上面的行中替换POST作为SESSION - 我也试过了,但它也不起作用。
为什么这些变量不会在页面之间持续存在?
答案 0 :(得分:0)
确保您在顶部的两个页面上都有session_start();
。
是的,$_POST
可行。在这种情况下,请仔细阅读这篇文章。 Post data in PHP
$ _ POST是一个数组,用于将从HTTP POST请求接收的数据存储到特定页面。它不像$ _SESSION变量,它在页面中持续存在。
答案 1 :(得分:0)
PHP有“页面范围”。这意味着,当运行脚本时,将创建所有变量,并且当脚本完成时,将处理所有变量。它没有持久性。对于所有意图和目的,如果没有输出缓冲(一个完整的主题),一旦访问页面并生成输出,脚本就会完成。该模型非常接近HTTP的设计方式。
如上所述,您需要一些其他形式的持久性来在页面之间传递变量。会议,数据库和数据存储,缓存,cookie和共享内存都经常在php应用程序中使用。
哪一个是合适的,需要进一步了解为什么需要持久性。
您还可以使用url参数的标准Web机制(自动放置在$ _GET超全局中),POST变量(自动放置在$ _POST超全局中)或cookie(自动放入)将变量从一个页面/脚本传递到另一个页面/脚本$ _COOKIE超全球)。
其中一些是连接的,因为php会话默认使用服务器使用的cookie来识别返回的客户端。
关于POST变量的具体问题,只要表单是POSTed目标脚本,POST变量就可以在$ _POST中使用。一种常用的技术是利用隐藏的表单字段或在存在多表单进程时设置表单字段的值,或者在错误处理的情况下。
要清楚,PHP没有持久性,这与在应用程序服务器(例如带有J2EE服务器的Java)下运行的其他语言不同。在J2EE中,可以创建对象,并且可以在任意数量的页面请求中存在于应用程序服务器中。某些实现中的PHP具有一些次要的持久性功能,如数据库池的情况,但语言没有内在的东西。
一旦您清楚页面范围,并且基本上没有任何东西超出一个HTTP请求/响应,您的持久性选项应该更清晰。