JavaScript中与PHP Sessions等效的方法

3

我想问一下如何在JS中实现会话,我发现了一些可以像我找到的这个例子一样使用的函数:

String exforsys = request.getParameter("test"); 
session.setAttribute("test", exforsys);

然后只需使用session.getAttribute(exforsys);

但没有响应,我猜它只能在servlets或其他地方使用。

无论如何,我决定也许有人有一种替代方法,而不仅仅是使用会话,我的目的是在一个页面上单击链接,根据所按下的链接加载不同的信息。

由于它是一个onclick函数,我被JS卡住了!

因此,我需要将此信息传递给第二个页面,cookie很好用,因为它可以轻松处理PHP和JS,但某些计算机会删除cookie,这并不好!

有任何建议或其他方法可以实现我的目标,而不使用会话吗?

7个回答

4

会话是服务器变量,因此无法被JavaScript使用。

但是,您可以通过ajax请求检索会话变量。

脚本(jQuery)

//This portion will be triggered once the DOM is loaded and is ready
$(document).ready(function() {
    $.post("getsession.php",
       { "variable" : "yourneededsessionvariable" }, 
       function(data) {
         //data contains your session data
       }
    );
});

PHP

//getsession.php
<?PHP
session_start();
echo $_SESSION[$_POST['variable']];
?>

除非你实在很无聊,并且简单地编写一个小的PHP脚本,通过AJAX加载并返回$_SERVER变量集合的JSON表示形式! - jerluc
@jerluc,我只是在建议那种方法。哈哈 - Starx
尽管它很简单,但它是一种相当有用的实用脚本。 - jerluc
是的,如果制作一个简单的插件..它绝对是一种实用工具。 - Starx
我认为,在页面加载期间您会需要这个,因此我会更新我的答案。 - Starx
显示剩余2条评论

2

使用本地存储或客户端控制的cookie。会话使用服务器控制的cookie。Cookie只是驻留在客户端上的小文件。


还有要考虑的会话存储(在关闭选项卡时销毁数据)。 - TimNguyenBSM

1

将要在下一页获取的数据追加到查询字符串中。

<a href="foo.html?bar=123">123</a>
<a href="foo.html?bar=456">456</a>

然后在foo.html中,您可以检查location.href以查看传递了什么。这里不需要使用cookie。


1

会话句柄存储在 cookie 中。如果不接受 cookie,则服务器将会话 ID 添加到 URL 中。如果没有 cookie,则无法持久化除 URL 以外的任何内容。

为什么 "onclick" 会阻止您使用会话?您可以通过 ajax 将事物发送到服务器并在 onclick 中将其添加到会话中。


1

会话通常指“存储在服务器上并通过存储在 cookie 中的令牌与用户关联的一些数据”。您无法使用客户端 JavaScript 进行此操作(出于明显的原因)。

您可以直接将数据存储在 cookie 中。

如果您愿意牺牲广泛的浏览器支持,则可以使用 HTML 5 和 Friends 引入的其中一种客户端存储机制来获得增加的存储。

也许有人有其他替代方法,而不仅仅是使用会话,我想做的是在一个页面上单击链接,根据按下的链接加载不同的信息。

只需链接到不同的页面即可。

有些计算机会删除 cookie,这样就不好了

如果他们删除所有 cookie,则会话也无法工作。


那是我最终的解决方案,用于链接到不同的页面!感谢您的回复。 - dimazaid

1

PHP是一种服务器端脚本语言,而JavaScript是客户端语言。你不能在JavaScript中直接创建会话。


0
为什么不直接使用请求参数呢?例如:http://yourserver.com/page.php?link=1

是的,这会起作用,因为我传递的数据根本不是关键的!谢谢。 - dimazaid
没有问题,不过 @Starx 的方法也相当直观,是更通用的解决方案。 - jerluc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接