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

Mysql PHP会话不会转移到其他页面,mysql,nginx,centos,php,Mysql,Nginx,Centos,Php,经过多年的网站开发,在这种情况下,同一个网站我有一个问题,我完全不知道发生了什么。 我有一个由三个页面组成的标准php登录: login.php输入登录信息,checklogin.php检查输入凭证,然后home.php作为登录页 多年来,所有这些都运作良好,因为在这段时间内,它们几乎没有改变。 现在,最近我搬去了一家托管公司,这显然意味着一项艰巨的任务:重新安装我喜欢的所有网络托管软件,并根据我的网站需要进行配置。 所以不管怎样,由于网站编码没有改变,我认为这一定是服务器问题,要么是服务器配置

经过多年的网站开发,在这种情况下,同一个网站我有一个问题,我完全不知道发生了什么。 我有一个由三个页面组成的标准php登录:

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

多年来,所有这些都运作良好,因为在这段时间内,它们几乎没有改变。 现在,最近我搬去了一家托管公司,这显然意味着一项艰巨的任务:重新安装我喜欢的所有网络托管软件,并根据我的网站需要进行配置。 所以不管怎样,由于网站编码没有改变,我认为这一定是服务器问题,要么是服务器配置,要么是我错过的设置

配置设置我现在已经工作了三天,然后“噗”的一声,它只是不想再设置会话了。 我可以设置一个并显示它,但如果我试图将它转到另一个页面,它将无法工作

有谁能解释一下,三天之内发生了什么奇迹般的事情,决定毁掉一切

请注意:

  • 是的,我正在使用
    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>';
?>
<?php
session_start();
echo 'ID: ' . $_SESSION['myid'] . ' - Username: ' . $_SESSION['myuser'] . '';
?>

在这种情况下要做的第一件事是使用以下命令打开错误报告:

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

在那之后,我猜你没有对
tmp
文件夹的写入
权限,或者
tmp
文件夹已满


因此,请检查您对该文件夹的权限,以及它是否还有空间。

您的服务器运行的是什么版本的PHP?由于升级到PHPV5.4(?不确定),我最近丢失了登录身份验证

基本上,
session\u已注册
。我切换到验证会话标识:

if(isset($\u会话['valid\u user']))


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

我终于找出了哪里出了问题,所以我将为遇到相同问题的任何人解释

将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页显示会话变量时,您是否遇到任何错误或什么都没有?(确保启用错误报告功能)同时确保tmp文件夹还有空间,并且您有写入权限!打开
后立即将错误报告添加到文件顶部好的,现在我在我创建的两个测试页上收到了一个以前没有的错误:
警告:未知:写入失败:设备上没有剩余空间(28)在第0行的未知中,我认为您的tmp文件夹已满?这可能有助于我在一台服务器上修复它,
/tmp/
文件夹有14gb的数据库备份。哈不管怎样,我的另外两台服务器似乎仍然很固执。我将这两个测试页放在它们上面,现在出现了以下错误:
警告:未知:无法写入会话数据(文件)。请验证第0行未知中session.save_path的当前设置是否正确(/var/lib/php/session)
路径是否正确,并且所有三台服务器都具有相同的php.ini设置。它也有正确的权限。@Equinox04嗯,好的!但是备份的提示是好的?不是吗?;DHaha,是的,谢谢:)一个固定,两个去。@Equinox04只是出于好奇:你只有3台服务器,对吗?或者还有更多服务器需要修复:D?@Equinox04您是否有文件夹
/var/tmp
,因为如果此文件夹已满,则可能会影响会话数据的保存!我在所有三台服务器上运行PHP5.3。但是,关于您的建议,我从未使用过
会话_is_registed()函数。我一直支持您现在如何进行后台登录页面自动验证<代码>如果(!isset($\u SESSION['logged\u in']){//返回登录}或者{//显示页面}
可能不是最有效的方法,但它能满足我的需要。很高兴你能找到它!(顺便说一句:你可以接受你自己的答案!而且投票表决对我来说也很好)