Как использовать $ .post для включения в запрос новой страницы - PullRequest
3 голосов
/ 16 сентября 2011

Я работаю на сессии без файлов 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 таким образом.Полагаю, я бы сделал нечто подобное, если бы использовал скрытое поле ввода.И теперь я хочу, чтобы эта переменная (session_id) из window.name действовала так, как если бы это были файлы cookie - пользователь нажимает на какую-то ссылку, которая переводит его в другую часть моей сети => запрос отправляется на сервер, сервер отвечаетстраница отображается.С помощью этого запроса я хочу отправить session_id на сервер, используя сообщение (как если бы это был файл cookie) - но я не могу понять, как это сделать.Я думал о чем-то вроде этого:

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

, но я не думаю, что это сработает, и, как я уже сказал, я не собираюсь использовать перезапись URL.Другим способом сделать это, вероятно, было бы иметь какую-то скрытую запись типа формы, щелкнуть ссылку, установить действие формы (ссылка на ссылку), установить data: session_id и запустить действие формы.Любые идеи, чтобы отправить сообщение, чтобы следовать следующим страницам запроса?Или как использовать скрытое поле формы для достижения того же?Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011
$('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>

Может быть, что-то подобное будет работать?

0 голосов
/ 16 сентября 2011

Вы можете получать данные на сервер с каждым запросом страницы с помощью файлов cookie, параметров запроса URL или путем публикации данных формы.

Для поддержания сеанса по каждой ссылке на вашем сайте без файлов cookie потребуется переопределение javascript для каждого отдельного URL-адреса, который пользователь посещает на вашем сайте, чтобы либо превратить его в сообщение формы с sessionID в форме, либо добавить параметры запроса с помощью sessionID. Насколько это практично, зависит от того, сколько мест на вашем сайте вам нужно переопределить.

Если бы я реализовывал сеанс без файлов cookie, я бы использовал перезапись URL (в идеале на стороне сервера), поэтому каждый URL на странице либо проходит через общую функцию JS, которая добавляет идентификатор сеанса перед обработкой клика, либо просто перезаписывает идентификатор в URL, так что обычный щелчок может произойти, и он будет иметь сеанс в URL. Это позволяет вам сохранить большую часть навигации и серверной логики, но перемещает sessionID из cookie в URL. Конечно, это не будет постоянным при переходе от одного сеанса к другому, если пользователь не добавит в закладки URL-адрес с идентификатором sessionID, поэтому пользователям придется заново устанавливать сеанс каждый раз, когда они заходят на ваш сайт.

...