Плагин Jquery Cookie - несколько значений? - PullRequest
8 голосов
/ 21 июня 2011

Я использую популярный плагин jquery Cookie https://github.com/carhartl/jquery-cookie Хотите знать, как установить и прочитать cookie с несколькими значениями? Или, возможно, можно добавить / удалить значения для этого файла cookie?

$. Cookie («MyTestCookie», электронная почта, {expires: 10});

Я хочу добавить имя пользователя в тот же файл cookie

Обновление: просто пример в .Net Хранение нескольких значений в файлах cookie

Ответы [ 4 ]

17 голосов
/ 21 июня 2011

Если вы хотите установить cookie-файл с несколькими значениями или «подразделами» и сделать их читаемыми из .NET, вам необходимо сохранить подраздел как пары имя-значение, отформатированные как строка запроса.Вы можете использовать метод jQuery.param () для преобразования объекта Javascript в строку запроса.

var obj = { email: 'jdoe@example.com', username: 'jdoe' };
$.cookie("MyTestCookie", $.param(obj), { expires: 10 });

Затем на сервере вы можете получить доступ к значениям как:

var email = Request.Cookies["MyTestCookie"]["email"];
var username = Request.Cookies["MyTestCookie"]["username"];

РЕДАКТИРОВАТЬ: Я создал тестовую страницу, чтобы показать чтение / запись многозначных куки как на сервере, так и на клиенте.http://www.systemex.net/Cookies/

ПРИМЕЧАНИЯ:

  • Вам необходимо позаботиться о том, чтобы избежать или убрать подразделы.Таким образом, любые встроенные = и & обрабатываются корректно
  • При чтении и записи файлов cookie jquery используйте параметр {raw: true}, чтобы он не удваивался.
  • Я написал $ .deparamфункция, которая преобразует строку name = value & name2 = value2 в объект javascript {name: value, name2: value2}
  • И последнее: плагин cookie jquery не перезаписывает cookie с тем же именем, он простодобавляет его к текущей коллекции файлов cookie.На этом этапе, вероятно, было бы лучше переписать плагин для поддержки подразделов и изменения существующих файлов cookie.

В любом случае, надеюсь, это поможет.

Вот Default.aspx

<h1>Get Cookie From Server:</h1>
<ul>
<li>Email: <%= GetCookie("MyTestCookie", "email")%></li>
<li>Username: <%= GetCookie("MyTestCookie", "username")%></li>
</ul>
<h1>Get Cookie From Client:</h1>
<ul>
<li>Email: <span class="cookie" data-name="MyTestCookie" data-key="email" /></li>
<li>Username: <span class="cookie" data-name="MyTestCookie" data-key="username" /></li>
<li>Raw: <span id="raw" /></li>
</ul>
<h1>Set Cookie From Client:</h1>
<ul>
<li>Email: <input type="text" name="email" value="" /></li>
<li>Username: <input type="text" name="username" value="" /></li>
</ul>
<input type="submit" value="Submit" />

<script>

    $(function () {
        $(".cookie").each(function (index) {
            var name = $(this).data('name');
            var key = $(this).data('key');
            var cookie = $.deparam($.cookie(name, { raw: true }));

            $(this).html(cookie[key]);
        });
        $('#raw').text(escape($.cookie("MyTestCookie"), { raw: true }));


        $("form").submit(function () {
            var o = {};
            o.email = $('input[name=email]').val();
            o.username = $('input[name=username]').val();
            var value = $.param(o);
            var cookie = $.cookie('MyTestCookie', value, { raw: true });
            return true;
        });
    });

    jQuery.deparam = function (params) {
        var o = {};
        if (!params) return o;
        var a = params.split('&');
        for (var i = 0; i < a.length; i++) {
            var pair = a[i].split('=');
            o[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
        }
        return o;
    }

</script>

Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        var cookie = new HttpCookie("MyTestCookie");
        cookie["email"] = HttpUtility.UrlEncode("jdoe@example.com");
        cookie["username"] = HttpUtility.UrlEncode("jdoe&123");
        Response.Cookies.Add(cookie);
    }
}

public string GetCookie(string name, string key)
{
    var cookie = Request.Cookies[name];
    return cookie != null ? HttpUtility.UrlDecode(cookie[key]) : "";
}
4 голосов
/ 19 октября 2012

Попробуйте это: https://github.com/tantau-horia/jquery-SuperCookie

Быстрое использование:

создать - создать cookie

проверка - проверка существования

verify - проверить значение cookie, если JSON

check_index - проверить, существует ли индекс в JSON

read_values ​​- прочитать значение cookie в виде строки

read_JSON - прочитать значение cookie как объект JSON

read_value - прочитать значение индекса, хранящегося в объекте JSON

replace_value - заменить значение из указанного индекса, хранящегося в объекте JSON

remove_value - удалить значение и индекс, сохраненные в объекте JSON

Просто используйте:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_value("name_of_the_cookie","name_field_1");
4 голосов
/ 21 июня 2011

Даже если не рекомендуется, вы все равно можете добавить несколько значений в файл cookie и выполнить обработку самостоятельно.

(Это уменьшит количество файлов cookie, сохраняемых в браузере, но, поскольку современныебраузеры предназначены для обработки огромного количества файлов cookie, которые не влияют на скорость загрузки)

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

var setofcookies = username + "%" + password + "%" + email;
$.cookie("MyTestCookie", setofcookies, { expires: 10 });

Позже вы можете использовать SPLIT функция для получения кода в правильное значение массива:

var cookie = $.cookie('MyTestCookie')
var mycookies = cookie.split("%");
document.write(mycookies[0]);

Это наиболее подходящий метод, который вы можете использовать для обработки куки, другие методы немного замедляют страницу.

0 голосов
/ 15 марта 2018

Когда я использовал

var obj = { a: 'test', b: 'best' };
$.cookie("MyCookie", $.param(obj), { expires: 10 });

Я получил это значение в куки

а% 3Dtest% 26b% 3Dbest

Итак, чтобы получить что-то вроде

а = тест & б = лучший

вам нужно добавить эту строку перед $ .cookie ()

$.cookie.raw = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...