今天,我接受了Skype的PHP开发人员面试,其中一个问题是有关Cookie和PHP会话的问题。
问题是,如果在用户浏览器中禁用了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
This is where I start and set php sessions.
session_start();
$_SESSION['test1'] = "SessionTest1";
$_SESSION['test2'] = "SessionTest2";
?>
This is a link, that starts new HTTP Request, and tries to read session set on this page:
session.php
session_start();
var_export($_SESSION);
?>
现在,如果您在浏览器中启用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?开始),但他相信我。 我向他解释了Session的工作原理,您可以在不使用Cookie的情况下使用它,但是将session id作为GET变量传递,并告诉他我在采访中告诉他们,但是他们告诉我不,不,不...:S
因此,基本上,这个家伙对PHP和PHP Sessions一无所知,是的,他是一个向我询问有关Session的人,告诉我PHP Session可以在没有cookie的情况下工作,即使我告诉他它无法完成,那 有一种方法可以在不使用Cookie的情况下使用PHP会话,但是默认情况下它将不起作用。 他就像,不,不,不...最后,他告诉我,他认为会话可以在不使用cookie的情况下工作,因为作为服务器上的系统管理员,他永远无法在tmp文件夹中看到会话?!?!?
无论如何,那些家伙很喜欢PHP,我无法接受他们的工作机会,毕竟我不认为他们会为我提供工作...
感谢所有的评论!