Может ли JavaScript прочитать объект HTTP Session? - PullRequest
8 голосов
/ 19 марта 2012

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

Ответы [ 2 ]

13 голосов
/ 19 марта 2012

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

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

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

3 голосов
/ 19 марта 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.

...