【问题标题】:Comment system breaks upon opening a new browser tab打开新的浏览器选项卡时评论系统中断
【发布时间】:2012-08-16 06:56:11
【问题描述】:

我的网站存在某种设计问题。 介绍如下:

我有一个简单的动态页面,其中包含一个视频播放器,旁边还有一堆要播放的视频。在视频播放器下方有一个由jquery form plugin 驱动的评论部分,因为如果有人在观看时输入评论,我自然不希望页面刷新和重置视频。

因此,页面通过 $_GET 变量获取要播放的视频 ID,然后根据来自 MySQL 数据库的 ID 获取另外 10 个左右的视频链接,并播放第一个并将其余的链接列为播放器旁边的链接。

评论系统很简单。它从 MySQL 表中获取与播放视频具有相同 ID 的所有 cmets,并通过前面提到的 jquery 表单插件列出它们。输入新评论后,它会通过定位相同的 ID 再次将评论添加到表中。

由于 ajax 表单插件从包含注释显示/添加代码的外部 PHP 文件中获取 cmets - 我必须使用 $_SESSION 变量将信息从主页传递到这些文件。

问题出在这里:

当客户正常浏览页面时,一切正常。但当他决定将另一个视频打开到新标签时 - 评论系统崩溃了。

所以发生的情况是,我将视频 ID 从主页的 $_GET 变量传递到 $_SESSION 变量,并使用它让外部 show/add-cmets-PHP-files 知道要显示哪些 cmets。当客户仅使用一个选项卡但当他在新选项卡中打开另一个视频时,这工作正常,$_SESSION 变量当然会更新以匹配新选项卡当前正在播放的视频的 cmets,并且由于此变量在两个选项卡中相同 - 原始选项卡现在错误地指向新标签的 cmets。

所以..希望澄清一下:

浏览器标签 1:

$_SESSION['now_playing'] = 视频 1

[..client 在第二个标签中打开另一个视频]

浏览器标签 2:

$_SESSION['now_playing'] = 视频 2

..从这一点上标签1的cmets当然是相同的 作为选项卡 2。

在创建新标签或类似的东西时是否有任何技巧来启动新会话?我对这一切都很陌生,所以可能显然很愚蠢..任何如何解决这个问题的指针都将不胜感激 - 即使它是实现评论的更好方法 - 必须在没有页面刷新的情况下添加 cmets .

问候,kitsu

【问题讨论】:

  • 认为您可以添加隐藏字段。页面加载后,将其值设置为会话变量。并将您的 jquery 值指向隐藏字段而不是会话变量。

标签: php ajax session


【解决方案1】:

您遇到的经典问题是会话数据由 cookie 控制,因此是每个浏览器而不是每个屏幕。

一种方法是在屏幕上设置一个隐藏字段。在处理 get 以创建屏幕时,将其设置为唯一值,并将该值用作会话数据的键。

然后将值与 ajax 请求一起传回 - 因此每个屏幕的请求都由会话数据的不同部分处理。

【讨论】:

  • 为 jco 和 Ian 的答案干杯!按照您的建议,通过使用隐藏字段设法使其按预期运行:-)
猜你喜欢
  • 1970-01-01
  • 2016-09-24
  • 2018-08-29
  • 1970-01-01
  • 2015-06-11
  • 2014-03-19
  • 1970-01-01
  • 2011-07-28
相关资源
最近更新 更多