会话变量在PHP中发生变化

时间:2015-03-13 12:44:19

标签: php session

我在PHP编码中遇到了一个令人困惑的问题。这是我在过去两年创建网站时第一次看到这样的东西。

假设我有以下两页:

1)index.php 2)check.php

现在在index.php我有以下代码:

session_start();
// 5 digit number for my captcha system
$_SESSION['my_code'] = rand(10000, 99999);

现在这是check.php中的代码:

session_start();
echo $_SESSION['my_code'];

有时是$_SESSION['my_code']页面中check.php的值 与index.php页面中的值不同。我可以说每4到5次 10次​​。

如果我在index.php的会话变量中分配一个常量值,我就不会再看到这个问题。

4 个答案:

答案 0 :(得分:1)

第1页(sessions_a.php)

首先,从随机生成的数字中为会话数组分配一个变量。

<?php 
session_start();
// 5 digit number for my captcha system
$_SESSION['my_code'] = rand(10000, 99999);

$var = $_SESSION['my_code'];
echo $var; // echo'd example 67859

?>

<a href="sessions_b.php">Sessions B number</a>

然后在第2页(sessions_b.php) - 检查它是否已设置并执行相同的操作。它将从第1页回显相同的数字。

<?php 
session_start();

if (isset($_SESSION['my_code'])) {
    $var = $_SESSION['my_code'];
}

echo $var; // will have echo'd from example 67859

已经成功测试,将第一页上生成的相同数字回显到第二页20次。


您还可以在第2页内添加session_destroy(),以便在回显之后销毁该会话。

这将回显第1页的数字,但如果之后重新加载第2页则不会回显它 例如:有人在从第1页进入回音后重新加载第2页。

<?php 
session_start();

if (isset($_SESSION['my_code'])) {
 session_destroy();
   echo $_SESSION['my_code']; // will only echo once, not on reloading that page
}

else{
   echo "Session's timed out.";
}
  • 它也可以作为“一次性使用”,但是你需要使用更广泛的数字才能使它成为唯一的,以及添加UNIX时间戳,microtime(),以及uniqid ()以确保你没有得到任何类型的重复。

参考文献:

答案 1 :(得分:0)

每当呈现index.php时,您都会通过

更改会话的值
 $_SESSION['my_code'] = rand(10000, 99999);

如果是常数,则限制值。这就是您查看不同值的原因。

您可以在索引上指定一个特定值,如果已经设置了会话,请不要再使用php的ISSET函数设置它。

答案 2 :(得分:0)

每次访问$_SESSION['my_code']时,您都会将index.php设置为新内容。

你可以做的是:

if (!isset($_SESSION['my_code'])) {
    $_SESSION['my_code'] = rand(10000, 99999);
}

然后,如果没有设置,它将是一个随机数,如果设置了,它将不会重新选择一个数字。

答案 3 :(得分:0)

我在这个问题上花了很多时间,但是我找到了解决方案。 问题是没有有效网址的图片。我为我的图像分配了正确的URL,问题得到了解决。