我在PHP做在线测验类型的脚本。最好使用cookie或会话

时间:2009-09-11 09:52:51

标签: php mysql

在PHP中进行在线测验类型的脚本。用户需要在45分钟内参加50个问题。

在此之后,它应关闭页面或将答案提交到下一页。

最好使用Cookie或会话。我怎样才能做到这一点。

是会话概念的新手,所以你可以建议合适的代码。

等待最早的回复

2 个答案:

答案 0 :(得分:2)

我认为,因为这是一个小小的问题,你会计算点数,记录排名等等。所以你的用户最终会试图作弊。

因此,我建议只有服务器端的会话。$_SESSION是一个数组,如$_GET$_POST,对于使用您网站的每个用户都是唯一的。您可以随意放置和检索任何内容。

唯一的客户端是一个名为PHPSESSID的特殊cookie,它是访问者的id,由PHP用来检索他的$_SESSION数组。

只有你需要做的就是在任何说明之前用session_start();开始每一页(除非你使用像ob_start()这样的缓冲)

答案 1 :(得分:2)

Cookie和会话之间的主要区别在于存储数据的位置。

使用Cookie,您可以将数据发送到浏览器,之后每次请求时,浏览器都会一直向您发送数据。

使用会话,您将数据存储在内存中,然后只设置一个具有ID的cookie,以识别存储数据的服务器内存中的空间块。

关键的区别在于,当数据存储在cookie中时:

  • 可以由用户编辑
  • 可以在网络上看到提出请求
  • 它增加了所需额外带宽中每个请求的权重
  • 占用较少的服务器内存

当数据存储在会话中时:

  • 用户无法访问它
  • 不会随每个请求来回发送(只有会话ID cookie)
  • 但它会占用服务器上的内存
  • 当需要移动到多个Web服务器时,它可能会在较大的站点上引起问题

我想说这取决于规模。对于很多问题,这些cookie会变得很重,并且每个请求都会非常大。如果您的测验是在分布在多个前端Web服务器上的环境中运行的,则会话可能是不可能的。

我怀疑决定因素是测验的完整性。如果用户无法更改数据(例如先前的答案,运行得分或测验开始的时间戳)至关重要,那么您需要将数据存储在其范围之外,这意味着使用会话。