打开新的浏览器选项卡时,注释系统会中断


Comment system breaks upon opening a new browser tab

我的网站有点设计问题介绍如下:

我有一个简单的动态页面,里面有一个视频播放器,旁边有一堆视频可以播放。在视频播放器下面有一个评论部分,它由jquery表单插件提供支持,因为如果有人在观看时输入评论,我自然不希望页面刷新和重置视频。

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

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

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

问题是:

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

因此,我将视频ID从主页的$_GET变量传递到$_SESSION变量,并使用它让外部显示/添加注释PHP文件知道要显示哪些注释。当客户端只使用一个选项卡时,这很好,但当他在新选项卡中打开另一个视频时,$_SESSION变量当然会更新以匹配新选项卡当前正在播放的视频的注释,并且由于该变量在两个选项卡中都相同,因此原始选项卡现在错误地指向新选项卡的注释。

所以。。希望能澄清一点:

浏览器选项卡1:

$_SESSION['now_playing']=视频1

[..客户端在第二个选项卡中打开另一个视频]

浏览器选项卡2:

$_SESSION['now_playing']=视频2

从这一点来看,标签1的评论当然是一样的如标签2。

有什么技巧可以在创建新选项卡或类似的东西时启动新会话吗?我对这一切都很陌生,所以可能会有明显的愚蠢行为。。任何关于如何修复这一问题的指针都将不胜感激——即使这是实现注释的更好方法——在不刷新页面的情况下添加注释是必须的。

此致,kitsu

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

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

然后将值与ajax请求一起传递回,这样每个屏幕的请求都会用会话数据的不同部分来处理。