经过多年开发网站,在这种情况下,我遇到问题的同一个网站,我正在完全失去正在发生的事情。 我有一个标准的PHP登录,包含三个页面:
login.php输入登录信息,checklogin.php检查输入凭据然后home.php作为登陆页面
所有这些都在这段时间内完美无缺,因为它们在这段时间内几乎没有变化。 现在,最近我搬到了托管公司,显然这意味着重新安装我所有的首选网络托管软件并将其配置到我的网站需求的艰巨任务。 所以无论如何,由于网站编码没有改变,我认为它必须是服务器问题,服务器配置或我必须错过的设置。
配置设置我已经工作了三天,然后'poof'它只是不想再设置会话了。 我可以设置一个并显示它,但如果我尝试将它带到另一个页面,它将无法工作。
任何人都可以解释可能在三天之内发生的神奇事件,这些事情决定毁掉一切吗?
一些注意事项:
session_start();
以及我打算参加会议的任何内容。/var/lib/php/sessions/
,具有对Apache / nginx 以下是我为测试而进行快速拼接的示例:
第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页应该显示我的会话,但它不会。 对此的任何帮助都非常感激,这让我很生气,主要是因为不知道是什么导致了它。 如果需要进一步的细节,请告诉我,我会尽量做到具体。
答案 0 :(得分:1)
在这种情况下,第一件事就是用这个来打开错误报告:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
之后我猜你不会在permission
文件夹上写tmp
或tmp
文件夹是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']))
这可能不是最安全的改编版,但它适用于我的低安全性网站。