当前位置: 首页 > 知识库问答 >
问题:

带有禁用cookie的PHP会话,是否有效?

子车飞文
2023-03-14

今天我在skype上面试了一份PHP开发人员的工作,其中一个问题是关于Cookie和PHP会话。

问题是,如果用户浏览器中禁用Cookies,可以设置和读取、使用PHP会话吗?

我告诉他们不要,因为PHP会话默认取决于设置会话cookie。当PHP会话启动时,新的会话Cookie被设置为默认名称PHPSESSID,并且该Cookie保存该会话id的值,例如:ftu63d8al491s5gatuobj39gk7,然后在apache服务器上的tmp文件夹文件sessftu63d8al491s5gatuobj39gk7中创建,它保存该会话的内容,例如:test1 | s:12:“SessionTest1”;测试2 | s:12:“会话测试2”;

他们告诉我这不是真的,即使用户在浏览器中禁用cookie,您也可以使用PHP会话。

然后我告诉他们可以这样做,但会话id将作为GET变量通过URL传递。这是不安全的,您必须在php中设置它。伊尼。

他们正在讨论如何使用PHP会话,即使浏览器中禁用了Cookies。如果我们正在建立网络商店,一些奶奶使用我们的网络商店并禁用cookie,她就不会在乎。PHP会话非常棒,因为即使用户禁用Cookies,您也可以使用它们。我就像wtf,wtf wtf?!?!

我用两个文件做了测试,索引。php启动会话并设置会话变量。然后是会话。php尝试读取该会话变量。

看起来是这样的:

指数php

<p>This is where I start and set php sessions.</p>

<?php

    session_start();
    $_SESSION['test1'] = "SessionTest1";
    $_SESSION['test2'] = "SessionTest2";

?>

<p>This is a link, that starts new HTTP Request, and tries to read session set on this page:</p>
<p><a href="session.php">Read Session</a></p>

一场php

<?php

    session_start();
    var_export($_SESSION);

?>

<p><a href="index.php">Back</a></p>

现在,如果您在浏览器中启用cookie,请访问索引。php和访问会话。php,会话将被打印出来。

但是,如果您清除浏览器历史记录和cookie,然后访问索引。php,然后访问会话。php,您会看到空数组,对吗?

所以基本上我的问题是,我说得对吗?如果您在浏览器中禁用cookie,您可以使用PHP会话吗?默认情况下,PHP会话机制取决于设置会话COOKIE吗?

更新:我对这件事很生气,所以我给和我说话的那个人回了电话。并问他,PHP会话在没有cookies的情况下默认可以工作吗?那家伙说“是的”。然后我告诉他他错了,他说:“是的,是的,如果你这么说的话……”然后开始大笑。然后我告诉他,若PHP会话可以在不设置cookie的情况下工作,那个么若它并没有存储在会话cookie中,服务器怎么知道当前用户/浏览器会话id呢?(我想看看他是否知道会话id可以作为GET变量传递)他沉默了至少20秒,告诉我他是系统管理员,我应该问问开发人员。他现年43岁,拥有13年丰富的商业经验(他从30?wtf?开始,但他在这件事上信任我。我向他解释了会话是如何工作的,你可以在没有Cookie的情况下使用它,但会话id作为GET变量传递,我告诉他我在面试时告诉过他们,但他们告诉我不,不s

所以基本上,这个家伙对PHP和PHP会话一无所知,是的,他是问我会话的那个人,他告诉我PHP会话可以在没有cookie的情况下工作,即使我告诉他这是不可能的,并且有一种方法可以使用没有cookie的PHP会话,但默认情况下不会工作。他就像,不不不不。。。最后,他告诉我,他认为会话可以在没有cookie的情况下工作,因为作为服务器上的系统管理员,他永远看不到tmp文件夹中的会话?!?!?

不管怎么说,那些家伙在PHP方面很差劲,我不可能接受他们的工作邀请,而且在这一切之后,我认为他们无论如何也不会给我工作。。。

谢谢你的评论!

共有3个答案

江高飞
2023-03-14

“是”会话将在禁用Cookie时工作。但是首先apache检查php配置设置。比如:

   --enable-trans-sid
and
   --enable-track-vars

如果这些值设置为true,会话将自动通过POST传递。

如果“-enable trans sid”和“-enable track vars”值设置为FALSE,则需要使用sid常量传递会话id。

< a href="index.php?<?= SID ?>" >Navigate from here< /a >

需要设置php。伊尼

ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);
司徒墨竹
2023-03-14

如果会话。使用\u cookies=1(启用Cookie。)

如果会话。使用\u cookies=0(禁用Cookie。)

如果session.use_cookies=1,则会话将sesionId存储到cookie中。调用session_id()从cookie中获取存储的会话ID,并将数据保存到会话数组中,将在所有页面上找到。如果session.use_cookies=0在这种情况下,会话不会将会话ID存储到cookie中,并且每次使用session_id()都会获得新的会话ID,并且在其他页面上存储到会话中的数据不会在其他页面上找到。

江德海
2023-03-14

"访问您网站的访问者被分配了一个唯一的id,即所谓的会话id。这要么存储在用户端的cookie中,要么在URL中传播。"

会议:导言

 类似资料:
  • 问题内容: 有没有一种方法可以在PHP中启动持久性会话而无需放置会话cookie?是否还有其他方法可以跨页面维护会话,例如基于IP地址的解决方案? 我问的原因是,尽管大多数用户都启用了cookie,但我想看看是否有一种方法可以使禁用它的用户使用登录系统(即使我个人认为禁用cookie只是不必要的偏执狂)。 问题答案: 我认为要求您的用户启用Cookie并不过分。当人们完全关闭它们时,我觉得很愚蠢。

  • 问题内容: 我有一个Java应用程序(JDK 1.7.0_13),正在使用java.net.HttpURLConnection连接到一些进行会话管理的基于servlet的服务。我试图弄清楚如何使用java.net.CookieManager跟踪会话cookie。阅读文档后,我得到的印象是,使用CookieHandler.setDefault(new CookieManager())安装Cookie

  • 问题内容: 今天,我接受了Skype的PHP开发人员面试,其中一个问题是关于Cookies和PHP Sessions的问题。 问题是,如果在用户浏览器中禁用了Cookie,是否可以设置和读取,使用PHP会话? 我没有告诉他们,因为默认情况下PHP会话取决于设置会话cookie。当PHP会话启动时,将使用默认名称PHPSESSID设置新的会话Cookie,并且该cookie将保存该会话ID的值,例如

  • 问题内容: 如标题所述,会话变量是否有限制(如果有),或者它们被视为 常规 变量并且可以存储相等数量的数据? 我在寻找是否存在除最大长度,最大值等变量类型之外的其他限制。 附注:如果问题不清楚,请告诉我。 提前致谢! 问题答案: 正如@Thariama所说,变量的数量没有限制。此外,会话中可以存储的数据量没有限制(我看到会话的大小为几十MB)。 随着会话的大小变大,您会遇到各种奇怪的问题:PHP

  • 问题内容: 我正在尝试制作一个支持cookie的URLConnection。根据文档,我可以使用: 我无法使此代码正常工作,然后我看到这仅适用于API 9(2.3)。但是,在较旧的模拟器中使用CookieManager不会出现错误,CookieManager存在,但是无法构造。有什么方法可以使此版本适用于早期版本?我试过了: 但这不起作用。 问题答案: 我能够使用Ian Brown的CookieM

  • 问题内容: 有人可以编写可重现此Linux Shell命令功能的PHP脚本吗? 我想我的代码几乎可以理解它,但是我不确定如何处理该属性。 到目前为止,这是我的代码: 问题答案: 例如: http://code.google.com/apis/gdata/articles/using_cURL.html