<php>会话不起作用(Cookie不发送?)</php>

时间:2014-01-14 01:03:18

标签: php session cookies

编辑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:警报(document.cookie中);在Firefox中给我

  

__ QCA = P0-1714752251-1385128732260

Chrome告诉我没有收到任何Cookie,也没有阻止。

鉴于许多人在调用session_start()时遇到无法发送cookie的问题;因为之前发过过cookies,我认为我不需要在我的代码中调用任何关于发送cookie的内容。

我不知道该怎么做。

我的主持人不允许会话

是我的另一个想法。但是,我可以看到我的php_info();它告诉我:

会话设置

  

启用会话支持

     

session.cache_expire 180

     

session.cookie_domain没有值

     

session.cookie_httponly Off

     

session.cookie_lifetime 0

     

session.cookie_path /

     

session.use_cookies On

     

session.use_only_cookies On

     

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开始)第9行的/functions.php

     

警告:session_start():无法发送会话缓存限制器 - 已在/ homepages / 23 / d315777983 / htdocs / mtm中发送的报头(输出从/homepages/23/d315777983/htdocs/mtm/index.php:14开始)第9行的/functions.php

我想我现在可以开始使用较旧的建议解决方案了。

编辑2:

根据建议,我添加了print_r($ _ SESSION);在包括之后。

它只打印“Array()”(不带引号)

我还将session_start移回到每个单独的文件中,名为BEFORE functions.php。

它说饼干是在第14行发送的 - 在我的代码中只是

<?php

编辑3: 那是浪费时间。删除了functions.php末尾的空格,名为startup();在任何html输出之前,现在它完美地工作。

3 个答案:

答案 0 :(得分:2)

我有类似的问题,我解决了它在源代码中删除空格。

具体而言,当答案过早地发送给客户端时会发生错误。如果在<?php ?> - 标记之外有空格,则可能会发生这种情况。防止这种错误的一种方法是在文档末尾没有?>

答案 1 :(得分:1)

当您在下面的行之后转到下一页时,尝试打印所有会话,看看是否得到它。

include 'functions.php';
print_r($_SESSION);

一种可能性我发现在调用

之前可能已在function.php中发送了一些标头
session_start();

答案 2 :(得分:0)

好吧,即使在解决方案后很长一段时间,发现另一个,我在清理浏览器数据后遇到$ _SESSION问题,我的连接脚本没有收到数据,所以我确实创建了另一个接收数据的脚本通过$ _REQUEST然后将这些数据转换为新的会话。希望能帮助任何人。