【发布时间】:2014-01-14 01:03:17
【问题描述】:
编辑 4:为什么此问题与链接问题不重复
虽然根本问题与链接问题中的相同,但我没有收到错误消息 Headers not send,所以我阅读的答案对我没有用此时。因此,这个问题虽然可能过长,但它本身就有优点。
原帖
很抱歉打扰你,但经过两天的研究,我崩溃了。我会尽量提供尽可能多的信息。
我在做什么:
我目前正在编写一个登录系统,只是为了好玩。注册,将数据输入数据库,登录都可以正常工作。我用 1and1 托管,我的数据库也在那里。
现在继续,我想从会话开始。最初,一切看起来都很好而且很简单。
session_start();
//returns true when put into an if()
$_SESSION['id'] = //user ID read from databse
echo $_SESSION['id']; //prints out the ID just fine.
当我转到另一个页面时,我立即调用 session_start();再次。 事实上,我所有的页面都以
开头include 'functions.php';
$con = startup();
//statup(); is in functions.php, connects to a databse,
//calls session_start(); succesfully, then returns the connection.
问题不应该出在函数中,因为它工作正常,我也尝试将连接/会话启动放在每个文件中,而不是共享函数 - 没有改变任何东西。
但没有一个会话变量保留值。
可能的问题
Cookie 不发送
javascript:alert(document.cookie);在 Firefox 中给了我
__qca=P0-1714752251-1385128732260
Chrome 告诉我没有收到任何 cookie,也没有被阻止。
鉴于许多人在调用 session_start() 时遇到无法发送 cookie 的问题;因为之前已经发送过 cookie,所以我认为我不需要在我的代码中调用任何关于发送 cookie 的内容。
我不知道该怎么做。
我的主持人不允许会话
是我的另一个想法。但是,我可以看到我的 php_info();它告诉我:
会话设置
启用会话支持
session.cache_expire 180
session.cookie_domain 没有值
session.cookie_httponly 关闭
session.cookie_lifetime 0
session.cookie_path /
session.use_cookies 开启
session.use_only_cookies 开启
session.use_trans_sid 0
这些只是我觉得有点相关的台词。
所以,我从中读到的是会话应该可以正常工作,使用 cookie 和其他东西。不过这个级别我也不是很懂。
所以,这就是我卡住的地方。我的代码的所有组件都工作正常,我很确定语法是正确的,据我了解,服务器支持会话。
哦,我还尝试将会话路径从 /tmp 更改为我网站空间上的一个目录 - 它似乎没有做任何事情,我的服务器“部分”上没有存储任何数据。
编辑:
使用关于error_reporting(E_ALL)的新信息;我现在收到一般错误消息
警告:session_start():无法发送会话 cookie - 标头已由 /homepages/23/d315777983/htdocs/mtm 中的 /homepages/23/d315777983/htdocs/mtm/index.php:14 发送/functions.php 第 9 行
警告:session_start():无法发送会话缓存限制器 - 标头已发送(输出开始于 /homepages/23/d315777983/htdocs/mtm/index.php:14)在 /homepages/23/d315777983/htdocs/mtm /functions.php 第 9 行
我想我现在可以开始使用旧的建议解决方案了。
编辑 2:
按照建议,我添加了 print_r($_SESSION);在包含之后。
它只打印“Array()”(不带引号)
我还将 session_start 移回到每个单独的文件中,称为 BEFORE functions.php。
它说 cookie 在第 14 行发送 - 在我的代码中实际上只是
<?php
编辑 3: 好吧,那是浪费了一些时间。删除了functions.php末尾的空格,称为startup();在任何 html 输出之前,现在它可以完美地工作了。
【问题讨论】:
-
描述得很好。但是
session_start()几乎总是返回 true;除非您事先启用了error_reporting(E_ALL),否则不会告诉您 cookie 问题。 -
哦,那改变了很多。现在它回到了已经发送错误的标题。谢谢。