如何使用$ .post包含在新页面的请求中

时间:2011-09-16 06:30:45

标签: php javascript session tracking cookieless

我正在进行无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并触发表单的动作。 发送帖子以跟随下一页请求的任何想法?或者如何使用隐藏表单字段来实现同样的事情?任何帮助真的很感激..

2 个答案:

答案 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>

也许这样的事情会起作用吗?