我正在进行无cookie会话,我不打算通过URL传递变量,但我尝试使用window.name或隐藏的表单。对于window.name,我会像这样做:
$(window).unload(function(){
if(location.href.indexOf(<my pages base url>) != -1){
// the user is going to my site
if($.parseJSON(window.name).previous_site.indexOf(location.protocol + '/' + location.host) != -1){
// now I know, that user was of my site
cookie_alternative = new Object();
cookie_alternative.previous_site = location.href;
cookie_alternative.session_id = $.parseJSON(window.name).session_id; // this is important
.....
window.name = $.toJSON(cookie_alternative);
}
else{
// the user was elsewhere
cookie_alternative = new Object();
cookie_alternative.previous_site = location.href;
cookie_alternative.session_id = <something new>;
.....
window.name = $.toJSON(cookie_alternative);
}
}
else{
//the user goes somewhere else
window.name = '';
}
});
所以我可以这样跟踪session_id。如果我要使用隐藏的输入字段,我想我会做类似的事情。而现在,我希望window.name中的这个变量(session_id)就好像它是cookie一样 - 用户点击某个链接,这会将他带到我的web =&gt;的不同部分。请求被发送到服务器,服务器响应并显示页面。有了这个请求,我想使用post将session_id发送到服务器(好像它是一个cookie) - 但我无法弄清楚,如何做到这一点。我正在谈论这样的事情:
$('a').click(function(){
$.post({
url: $(this).attr('href'),
data: $.parseJSON(window.name).session_id,
})
})
但我不认为它会起作用,正如我所说,我不打算使用URL重写。其他方法可以使用一些隐藏的表单类型的帖子,点击链接集表单的动作(链接的href),设置数据:session_id并触发表单的动作。 发送帖子以跟随下一页请求的任何想法?或者如何使用隐藏表单字段来实现同样的事情?任何帮助真的很感激..
答案 0 :(得分:0)
您可以通过Cookie,URL查询参数或发布表单数据,通过每个页面请求将数据提供给服务器。
在没有Cookie的情况下维护网站上每个链接的会话都需要javascript覆盖用户在您网站上访问的每个网址,以便将其转换为表单中包含sessionID的表单帖子,或者使用sessionID添加查询参数。这有多实用取决于您网站上有多少个地方,您必须覆盖一切。
如果我正在实现没有cookie的会话,我会使用URL重写(理想情况下是服务器端),因此页面中的每个URL都要经过一个通用的JS函数,该函数在处理点击之前添加会话ID或只是重写将ID放入URL中,以便正常点击可以发生,并且它将在URL中具有会话。这允许您保留大部分导航和服务器端逻辑,但将sessionID从cookie移动到URL。当然,从一个用户会话到下一个用户会话都不会持续存在,除非用户在其中为具有sessionID的URL添加书签,因此用户每次访问您的站点时都必须重新建立会话。
答案 1 :(得分:0)
$('a').click(function(e){
//Preventing link from triggering
e.preventDefault();
var elObj = $(e.currentTarget);
$('#secret-hidden-form').attr('action',elObj.attr('href'));
$('#secret-hidden-form').submit();
return false;
})
在页面底部:
<?php
if (isset($_POST['session_id']) {
$sessId = $_POST['session_id']
} else {
$sessId = uniqid();
}
?>
<form id="secret-hidden-form" method="post">
<input type="hidden" value="<?php echo $sessId; ?>">
</form>
也许这样的事情会起作用吗?