PHP会话不会转移到其他页面

时间:2014-11-13 00:39:50

标签: mysql nginx centos php

经过多年开发网站,在这种情况下,我遇到问题的同一个网站,我正在完全失去正在发生的事情。 我有一个标准的PHP登录,包含三个页面:

login.php输入登录信息,checklogin.php检查输入凭据然后home.php作为登陆页面

所有这些都在这段时间内完美无缺,因为它们在这段时间内几乎没有变化。 现在,最近我搬到了托管公司,显然这意味着重新安装我所有的首选网络托管软件并将其配置到我的网站需求的艰巨任务。 所以无论如何,由于网站编码没有改变,我认为它必须是服务器问题,服务器配置或我必须错过的设置。

配置设置我已经工作了三天,然后'poof'它只是不想再设置会话了。 我可以设置一个并显示它,但如果我尝试将它带到另一个页面,它将无法工作。

任何人都可以解释可能在三天之内发生的神奇事件,这些事情决定毁掉一切吗?

一些注意事项:

  • 是的,我在目标网页上使用session_start();以及我打算参加会议的任何内容。
  • 我使用这些标签让您了解我的服务器为网页运行的软件(因为我仍然不确定是什么原因造成的)
  • php会话路径为/var/lib/php/sessions/,具有对Apache / nginx
  • 的正确权限
  • MySQL正在收集数据,php正在设置第2页的会话,但第3页似乎已经丢失了会话。

以下是我为测试而进行快速拼接的示​​例:

第1页:设置会话:

<?php
session_start();
require_once'../connect.php'; // Database connection
$user_info = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id = '1'"));

$_SESSION['myid'] = $user_info['id'];
$_SESSION['myuser'] = $user_info['username'];

// Echo the set sessions just to make sure they set

echo 'ID: ' . $_SESSION['myid'] . ' - Username: ' . $_SESSION['myuser'] . '';
echo '<br /><a href="/page2.php">Click here to take your sessions to the next page</a>';
?>

第2页:继续进行会议:

<?php
session_start();
echo 'ID: ' . $_SESSION['myid'] . ' - Username: ' . $_SESSION['myuser'] . '';
?>

从上面的基本示例中可以看出,第2页应该显示我的会话,但它不会。 对此的任何帮助都非常感激,这让我很生气,主要是因为不知道是什么导致了它。 如果需要进一步的细节,请告诉我,我会尽量做到具体。

3 个答案:

答案 0 :(得分:1)

在这种情况下,第一件事就是用这个来打开错误报告:

<?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
?>

之后我猜你不会在permission文件夹上写tmptmp文件夹是full

请检查您对该文件夹的权限以及是否还有空格。

答案 1 :(得分:1)

好吧,我终于解决了我出错的地方所以我会为遇到同样问题的人解释。

将PHP会话存储在/var/lib/php/session中是我的主要问题,不是因为读/写权限,而是因为/目录的分区非常小并且填充了日志。

快速解决方法是删除日志和其他任何混乱目录的内容,但我个人将会话存储目录移动到更大的分区:/home

您可以在php.ini文件中执行此操作,该文件可能设置为/tmp/var/lib/php/session

; session.save_path = "/home"

你需要重新启动你运行的任何php服务和/或web服务器来重新加载php.ini,在我的例子中是nginx和php-fpm

$ service nginx restart
$ service php-fpm restart

(取决于您的操作系统)您可以使用以下命令检查服务器上的分区大小:

$ df -h

哪个应该给你这样的东西:

> df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       50G  6.1G   41G  13% /
tmpfs                  12G     0   12G   0% /dev/shm
/dev/sdb1             477M   60M  392M  14% /boot
/dev/mapper/VolGroup-lv_home
                      409G   71M  388G   1% /home

因此,只需选择您喜欢的分区,并将其作为php.ini中的会话路径

感谢所有评论试图帮助解决问题的人:)

答案 2 :(得分:0)

您的服务器运行的是哪个版本的PHP?我最近失去了登录身份验证,因为升级到PHP v5.4(?不确定)。

基本上,session_is_registered被贬低并消失了。我切换到验证会话标识:

if(isset($_SESSION['valid_user']))

这可能不是最安全的改编版,但它适用于我的低安全性网站。