【问题标题】:<PHP> Sessions don't work (Cookie not send?) [duplicate]<PHP> 会话不起作用(Cookie 不发送?)[重复]
【发布时间】: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 问题。
  • 哦,那改变了很多。现在它回到了已经发送错误的标题。谢谢。

标签: php session cookies


【解决方案1】:

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

具体来说,错误发生在过早向客户端发送答案时。当您在&lt;?php ?&gt;-tags 之外有空格时,这可能会发生意外。主要防止此错误的一种方法是在文档末尾没有?&gt;

【讨论】:

    【解决方案2】:

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

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

    我看到在调用之前可能已经在function.php 中发送了一些标头

    session_start();
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-31
        • 2010-09-30
        • 2020-09-16
        • 1970-01-01
        • 2015-07-13
        • 2018-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多