Может ли JavaScript читать объект HTTP Session?

Можно ли прочитать значение динамической переменной, такой как httpRequest.getSession("attr_name"), из JavaScript?


person fmjaguar3    schedule 19.03.2012    source источник
comment
Если бы у вас был метод сервера, который может вернуть его в вызов ajax, да.   -  person asawyer    schedule 19.03.2012
comment
Какой серверный язык вы используете? Как отслеживается сессия?   -  person Platinum Azure    schedule 19.03.2012
comment
Если вы имеете в виду JS на стороне клиента: Нет. Если у вас есть среда JS на вашем сервере, вы можете передать в нее эти параметры. Я предполагаю, что ваш язык сервера - Java?   -  person Sirko    schedule 19.03.2012
comment
Нет, я имею в виду клиентскую сторону. Я хотел бы динамически получать значения атрибутов из моего объекта сеанса HTTP на стороне клиента, но из javascript. Мой серверный язык — Java.   -  person fmjaguar3    schedule 19.03.2012


Ответы (2)


(Под Javascript я предполагаю, что вы имеете в виду клиентский скрипт в браузере.)

Нет, это невозможно. Содержимое объекта Session никогда не покидает сервер, поэтому клиентский сценарий не может напрямую считывать данные Session.

Если вы хотите получить к нему доступ в браузере, вы должны прочитать данные из объекта Session и отправить их вместе с ответом (например, в скрытом поле) или предоставить веб-службу, которая считывает данные из объекта Session и возвращается в браузер.

person Guffa    schedule 19.03.2012

Как я уже сказал в своем комментарии, единственным способом будет какой-то вызов Ajax и запросить его с сервера. Я не знаю, какой бэкэнд вы используете, вот как бы я сделал это в Asp.net MVC и jQuery.

(Если есть мелкие синтаксические ошибки, извиняюсь - не перед компилятором)

public class HomeController : Controller
{

    //abstract the session code away, don't let the evil javascript touch
    //it directly. Ideally this would all be in a seperate logic class or something.
    public string NameAttribute
    {
       get
       {
           return Session["attr_name"] as string ?? string.empty;
       }
    }
    [HttpGet]
    public string GetNameAttribute()
    {
        return NameAttribute;
    }
    public ActionResult Index()
    {
        return View();
    }
}



<script>
$(function(){
    $.get( 'home/GetNameAttribute', function( response ) {
        var name = response; //don't forget error checking, ommited
    });
});
</script>

В качестве альтернативы вы всегда можете записать нужные вам значения в скрытые поля и прочитать их с помощью обычного javascript.

person asawyer    schedule 19.03.2012