3

我正在处理无 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 的不同部分 => 请求被发送到服务器,服务器响应并页面显示。有了这个请求,我想使用 post 将 session_id 发送到服务器(好像它是一个 cookie)——但我不知道该怎么做。我在想这样的事情:

$('a').click(function(){
    $.post({
        url: $(this).attr('href'),
        data: $.parseJSON(window.name).session_id,
    })
})

但我不认为它会起作用,正如我所说,我不会使用 URL 重写。其他方法可能是有一些隐藏的表单类型的帖子,点击链接设置表单的操作(链接的href),设置数据:session_id 并触发表单的操作。发送帖子以遵循下一页请求的任何想法?或者如何使用隐藏的表单域来实现同样的事情?任何帮助真的很感激..

4

2 回答 2

0

您可以通过 cookie、URL 查询参数或通过发布表单数据将每个页面请求的数据发送到服务器。

在不使用 cookie 的情况下跨站点上的每个链接保持会话将需要 javascript 覆盖用户在您的站点上访问的每个 URL,以将其转换为表单中带有 sessionID 的表单帖子,或者添加带有 sessionID 的查询参数。这有多实用取决于您网站上有多少地方,您必须覆盖一些东西。

如果我在没有 cookie 的情况下实现会话,我将使用 URL 重写(理想情况下是服务器端),因此页面中的每个 URL 要么都通过一个公共 JS 函数,该函数在处理点击之前添加会话 ID,要么只是将 ID 重写为URL 所以正常的点击可以发生,它会在 URL 中有会话。这允许您保留大部分导航和服务器端逻辑,但会将 sessionID 从 cookie 移动到 URL。当然,这不会从一个用户会话持续到下一个用户会话,除非用户将带有 sessionID 的 URL 加入书签,这样用户每次访问您的站点时都必须重新建立会话。

于 2011-09-16T07:06:43.147 回答
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>

也许这样的事情会奏效?

于 2011-09-16T08:03:02.237 回答