我有一个<!>;我发誓我没有碰到服务器<!>的情况。老实说,我没有触及任何PHP脚本。我遇到的问题是PHP数据没有保存在不同的页面或页面刷新。我知道正在创建一个新的会话,因为我可以设置一个会话变量(例如$ _SESSION ['foo'] = <!>“; foo <!>”;然后在同一页面上将其打印出来就好了。但是当我尝试在另一个页面上使用相同的变量时,它没有设置!我可以在我的主机服务器上使用任何PHP函数或信息来查看发生了什么吗?

以下是一个示例脚本,目前无法在我的主机服务器上运行:

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

执行页面刷新后,'views'变量永远不会增加。我认为这是他们身边的问题,但我想确保我不是一个完全白痴。

这是我的主机服务器的phpinfo()(PHP版本4.4.7):

有帮助吗?

解决方案

感谢所有有用的信息。事实证明,我的主机更改了服务器并开始使用除/ var / php_sessions之外的其他会话保存路径,这些路径不再存在。一个解决方案就是在我的所有脚本文件中声明ini_set(' session.save_path','SOME WRITABLE PATH');,但那会很痛苦。我与主机进行了交谈,他们明确地将会话路径设置为确实存在的真实路径。希望这可以帮助任何有会话路径麻烦的人。

其他提示

检查以确保您没有将https://与http://混合使用。会话变量不会在安全会话和不安全会话之间流动。

有同样的问题 - 我发生的事情是我们的服务器管理员将session.cookie_secure布尔值更改为On,这意味着cookie只会通过安全连接发送。由于没有找到cookie,php每次都会创建一个新的会话,因此没有看到会话变量。

使用phpinfo()并检查session.*设置。

也许这些信息存储在Cookie中,而您的浏览器也不接受Cookie,就像那样。

首先检查并返回结果。

您还可以执行<!> nbsp; print_r($_SESSION);转储此变量并查看内容....

关于session.save_path,<=>是否有效?您的Web服务器是否具有对此目录的写访问权限?

希望这有帮助。

我有以下问题

的index.php

<?
    session_start();
    $_SESSION['a'] = 123;
    header('location:index2.php');
?>

index2.php

<?
  session_start();
  echo $_SESSION['a'];
?>

变量$_SESSION['a']未正确设置。然后我改变了index.php依据

<?
    session_start();
    $_SESSION['a'] = 123;
    session_write_close();
    header('location:index2.php');
?>

我不知道这内部意味着什么,我只是向自己解释会话变量变化不够快:)

检查Web服务器是否可以写入会话保存路径。

确保你打开了曲奇饼干...(当我把它们关掉来测试时我会忘记)

将firefox与firebug扩展名一起使用,以查看cookie是否已设置并传回。

并且在一个不相关的说明中,开始查看php5,因为php 4.4.9是php4系列的最后一个。

检查组和所有者是运行脚本的文件夹的对象。如果组ID或用户ID错误,例如设置为root,则会导致会话无法正确保存。

检查<!> quot; views <!>的值;在你增加它之前。如果由于一些奇怪的原因,它被设置为字符串,那么当你向它添加1时,它将始终返回1.

if (isset($_SESSION['views'])) {
    if (!is_numeric($_SESSION['views'])) {
        echo "CRAP!";
    }
    ++$_SESSION['views'];
} else {
    $_SESSION['views'] = 1;
}

好吧,我们可以消除代码错误,因为我在自己的服务器上测试了代码(PHP 5)。

这是检查的内容:

  1. 你在任何地方调用session_unset()或session_destroy()吗?这些函数将立即删除会话数据。如果我把这些放在脚本的末尾,它就会像你描述的那样开始表现。

  2. 它在所有浏览器中的行为是否相同?如果它在一个浏览器而不是另一个浏览器上运行,则可能在非功能浏览器上出现配置问题(即您关闭了cookie并忘记打开它们,或者错误地阻止了cookie)。

  3. 会话文件夹是否可写?您无法使用is_writable()进行测试,因此您需要转到文件夹(从phpinfo()看起来像/ var / php_sessions)并确保会话实际上已创建。

如果您在php5中设置会话,然后尝试在php4页面上阅读它,它可能看起来不正确!使页面成为相同的php版本或设置session_path。

我花了很多年的时间寻找类似问题的答案。这不是代码或设置的问题,因为非常相似的代码在同一服务器上的另一个.php中完美地工作。原来这个问题是由于在此页面中将大量数据保存到会话中引起的。在一个地方我们有这样的一行:$_SESSION['full_list'] = $full_list其中$full_list是从数据库加载的数据数组;每行是一个大约150个元素的数组。当代码最初在几年前编写时,DB只包含大约1000行,因此<=>包含大约100个元素,每个元素是一个包含大约20个元素的数组。随着时间的推移,20个元素变成150和1000行变成17000,因此代码将近64兆的数据存储到会话中。显然,在存储了大量数据的情况下,它拒绝存储任何其他内容。一旦我们更改了代码以在本地处理数据而不将其保存到会话中,一切都运行良好。

  

我知道我发现的一个解决方案(OSX与Apache 1并且只是切换到PHP5)当我遇到类似问题时,取消设置1个特定键(即未设置($ _ SESSION ['key']);)导致它不是保存。一旦我没有取消该密钥,它就会保存。我再也没见过这个,除了在另一个网站上的那个服务器上,但那时它是一个不同的变量。没有什么特别的。

感谢这一个达里尔。这帮助了我。我正在删除一个会话变量,由于某种原因,它使会话保持不变。现在我只是将它设置为null(这对我的应用程序来说很好),并且它有效。

我知道我发现的一个解决方案(OSX与Apache 1并且只是切换到PHP5)当我遇到类似问题时,取消设置1个特定键(即未设置($ _ SESSION ['key']);)导致它不是保存。一旦我没有取消该密钥,它就会保存。我再也没见过这个,除了在另一个网站上的那个服务器上,但那时它是一个不同的变量。没有什么特别的。

以下是我在其他评论中未提及的一个常见问题:您的主机是否正在运行某种缓存?如果他们以某种方式自动缓存结果,你会得到这种行为。

只是想补充一点,如果您不小心错过了网页上的session_start()语句,也会发生这种情况。

我将会话cookie路径设置为<!> quot; // <!> quot;而不是<!> quot; / <!> quot;。萤火虫太棒了。 希望它对某人有所帮助。

我在使用安全页面时出现此问题,我来自www.domain.com/auth.php,重定向到domain.com/destpage.php。我从auth.php链接中删除了www并且它有效。这让我失望,因为一切都行不通;当我到达目的地时,会议没有设定。

经常被忽视的一个常见问题是在session_start()命令之前必须没有其他代码或额外的间距。

我之前遇到过这个问题,之前我在session_start()之前有一个空行,导致它无法正常工作。

添加我的解决方案:

检查您是否访问正确的域。我正在使用www.mysite.com来启动会话,并尝试从mysite.com(没有www)接收它。

我已经解决了这个问题,将所有域名的htaccess重写添加到www以保证安全/网站。

同时检查您是使用http还是https。

编辑你的php.ini。
我认为session.gc_probability的值是1,所以将其设置为0。

session.gc_probability=0

检查您是否正在使用session_write_close();在任何地方,我在另一个会话之后使用这个,然后再次尝试写入会话并且它无法工作..所以只是评论sh * t out

我必须做的另外几件事(我有同样的问题:PHP升级到5.4后没有sesson保留)。您可能不需要这些,具体取决于您的服务器的php.ini包含的内容(请查看phpinfio());

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

基本上,你的php.ini应该设置为没有cookie,会话参数必须与osc想要的一致。

您可能还需要在application_top.php中更改一些会话代码片段 - 创建tep_session_is_registered(...)调用中不存在的对象(例如导航对象),将$ HTTP_变量设置为较新的$ _SERVER对于空对象的一些和其他一些isset测试(谷歌信息)。我最终能够使用原始的sessions.php文件(包括/ classes和includes / functions)以及稍微修改过的application_top.php来重新开始。 php.ini设置是主要问题,但这当然取决于您的服务器公司安装的默认设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top