Плагин jQuery Cookie-несколько значений?

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

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

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

Update: просто пример в .Net хранение нескольких значений в cookies

4 ответов


если вы хотите установить 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"];

EDIT: я создал тестовую страницу, чтобы показать чтение / запись многозначных файлов cookie как на сервере, так и на клиенте. http://www.systemex.net/Cookies/

Примечания:

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

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

здесь по умолчанию.аспн

<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>

по умолчанию.аспн.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]) : "";
}

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

(это уменьшит количество cookies, хранящихся в браузере, но так как современные браузеры предназначены для обрабатывать огромные нагрузки cookies it не сделал бы ничего со скоростью загрузка)

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

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

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

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

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


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

Быстрая Загрузка:

create-создать cookie

проверяем - проверяем наличие

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

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

read_values-читать значение cookie как string

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");

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

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

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

a%3Dtest%26b%3Dbest

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

a=test&b=best

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

$.cookie.raw = true;