我目前正在开发一个我正在尝试使用会话变量的网站。
我有一个以session_start();
开头的控制器脚本( index.php ),并在if
语句中包含两个不同的HTML文件。当我转到/quote/index.php
时,一切都很常规,我设置的会话变量会按预期在页面上回显,但是如果我从URL中删除“index.php
*”,那么它指向的只是/quote
页面加载但是没有会话变量显示。
我没有在我的脚本中的任何地方使用session_destroy
,并且会话变量没有回显“0
”所以我很确定它们没有被取消,看起来好像它们如果没有URL中的文件名,则会被忽略!
任何关于为什么会发生这种情况的见解都会很棒, 感谢
/quote/index.php(删除了多余的位):
<?php
session_start();
if (isset($_GET['form']))
{
include 'form.html.php';
exit();
}
if (isset($_GET['fetchquote']))
{
$width = mysqli_real_escape_string($link, $_POST['width']);
$height = mysqli_real_escape_string($link, $_POST['height']);
$_SESSION['height'] = $height;
$_SESSION['width'] = $width;
}
include 'quote.html.php';
?>
会话变量在quote.html.php中回显
答案 0 :(得分:1)
这两个文件名是什么? 似乎您所包含的文件之一名为index.html,并且位于mysite.com/quote/本身。如果我没有错,如果在目录中有index.html和index.php,则默认情况下会加载index.html,除非在url中明确指定了该文件。因此,在您未明确指定index.php的情况下,似乎正在加载index.html。当然,只有当目录中存在index.html时才会出现这种情况。
答案 1 :(得分:0)
确保您还在要回显会话变量的PHP页面顶部使用session_start()
。并确保index.php是根目录中的唯一索引。
您正在检查是否通过GET方法设置了选项。你的表格在哪里使用GET方法?
发布您的整个脚本,您将获得更好的答案。
答案 2 :(得分:0)
这可能与会话ID cookie的有效范围有关。因为如果cookie path设置为/quote/
,则Cookie只会在/quote/
及更高版本中提供。