当前位置: 首页 > 面试题库 >

禁用了Cookie的PHP会话,可以正常工作吗?

锺离声
2023-03-14
问题内容

今天,我接受了Skype的PHP开发人员面试,其中一个问题是关于Cookies和PHP Sessions的问题。

问题是,如果在用户浏览器中禁用了Cookie,是否可以设置和读取,使用PHP会话?

我没有告诉他们,因为默认情况下PHP会话取决于设置会话cookie。当PHP会话启动时,将使用默认名称PHPSESSID设置新的会话Cookie,并且该cookie将保存该会话ID的值,例如:ftu63d8al491s5gatuobj39gk7然后在apache服务器上的tmp文件夹文件中创建sess_ftu63d8al491s5gatuobj39gk7并保存该会话的内容,例如:test1
| s:12:“ SessionTest1”; test2 | s:12:“ SessionTest2”;

他们告诉我事实并非如此,即使用户禁用了浏览器中的cookie,您也可以使用PHP会话。

然后,我告诉他们您可以执行此操作,但是会话ID将作为GET变量通过URL传递。这并不安全,您必须在php.ini中进行设置。

他们在谈论即使在浏览器中禁用Cookie的情况下如何使用PHP会话。而且,如果我们正在建立网上商店,并且有一个奶奶使用我们的网上商店并禁用cookie,而她只是不在乎,那该怎么办。PHP会话很棒,因为即使用户禁用了Cookie,您也可以使用它们。我就像wtf,wtf
wtf?!?!

我用两个文件进行了测试,index.php启动会话并设置会话变量。然后session.php尝试读取该会话变量。

它是这样的:

index.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>

session.php

<?php

    session_start();
    var_export($_SESSION);

?>

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

现在,如果在浏览器中启用cookie,请访问index.php,然后访问session.php,会话将被打印出来。

但是,如果您清除浏览器历史记录和cookie,然后访问index.php,然后访问session.php,您会看到空数组吗?

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

更新:我对此很生气,所以我给正在和他聊天的那个人打了电话。问他,默认情况下,PHP会话可以在不使用cookie的情况下工作吗?那家伙说“是”。然后我告诉他他错了,他说:“是的,是的,如果你这么说……”然后开始大笑。然后我告诉他,好吧,如果PHP会话可以在不设置cookie的情况下工作,那么服务器如何知道当前的用户/浏览器会话ID(如果未将其存储在会话cookie中)?(我想看看他是否知道可以将会话ID作为GET变量传递)。他沉默了至少20秒钟,并告诉我他是系统管理员,我应该请开发人员来。他现年43岁,在企业中有13年的丰富经验(他以30?wtf?开始),但是他对此深信不疑。

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

无论如何,那些家伙很喜欢PHP,我无法接受他们的工作机会,毕竟我不认为他们会为我提供工作…

感谢所有的评论!


问题答案:

“访问您的网站的访问者被分配了一个唯一的ID,即所谓的会话ID。它要么存储在用户端的Cookie中,要么在URL中传播。”

会议内容:简介



 类似资料:
  • 将感谢任何关于我们应该如何处理这一点的提示!

  • 今天我在skype上面试了一份PHP开发人员的工作,其中一个问题是关于Cookie和PHP会话。 问题是,如果用户浏览器中禁用Cookies,可以设置和读取、使用PHP会话吗? 我告诉他们不要,因为PHP会话默认取决于设置会话cookie。当PHP会话启动时,新的会话Cookie被设置为默认名称PHPSESSID,并且该Cookie保存该会话id的值,例如:ftu63d8al491s5gatuob

  • 我不知道Codeigniter中会话的实际错误是什么。我的另一个项目很好地使用了这段代码。但在这种情况下,我遇到了问题。 对于登录会话,我的代码是: 我将会话检查为: 在进入控制器之前,我会像上面一样检查会话,如果会话不正确,则重定向到登录页面。 注销: 但是上面的代码不适合我。当我注销时,页面被成功地重定向到注销页面,但是会话没有被破坏,因为我可以访问需要会话设置的所有页面。请帮帮我。 我有一个

  • 问题内容: 我正在尝试正确注销管理员用户。这是我的功能: 基本上,一旦我对密码进行了身份验证,就将会话设置为有效(总共只有1个用户)。现在,当管理员点击注销时,我想销毁当前会话,并销毁cookie,以便他们不能只是使用浏览器中存储的会话cookie返回管理页面。但是我的代码不起作用。我点击注销,然后我可以直接导航回到管理页面。但是,如果我删除Cookie,则该功能非常完善。那么这里的cookie删

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

  • 我试图从URL列表中下载.html中的网页,但其中一些网站使用会话cookie,当我尝试Jsoup.connect(“URL”)时,我得到了403。 因此,我使用了Map/HashMap作为如何使用Jsoup管理cookies、维护cookies、使用Jsoup进行会话、检索cookies..,但仍然是403。 真正让我吃惊的是,一个像Mac Automator这样简单的应用程序可以完成这项工作,