GithubHelp home page GithubHelp logo

memcookies's Introduction

memcookies

Persist cookies when in cookies disabled mode, by automatically encrypting them and storing them on the client side.

Usage

Install:

npm install --save memcookies

Set up your middleware:

var memcookies = require('memcookies');

app.use(memcookies({

    // Secret key used to encrypt the cookies before they are passed to the client
    encryptionKey: myKey,
}));

This should be invoked as the first middleware, before anything else requiring cookies to be present.

Client side

Note that memcookies only works for ajax calls, not full-page posts, since it relies on being sent through custom http headers, and being persisted in memory on a single page.

Persisting the cookies

Firstly, you will need to pass the cookies down in your initial page render. You can get the value as follows on the server-side, to insert into your initial html:

// First we write out the head of our response. This ensures that all of the cookies which are going to be set, are set.
res.writeHead(200);

// Now we can render res.locals.encryptedCookies into our first page response
var templateContext = {
    encryptedCookies: JSON.stringify(res.locals.encryptedCookies)
};

You have two options for persisting the cookies on the client side:

1. Manually

  • On every ajax response, persist the x-cookies header
  • On every ajax request, send the persisted x-cookies header

For example:

var memcookies = {};

jQuery.ajax({
    type: 'POST',
    url: '/api/some/action',
    headers: {
        'x-cookies': JSON.stringify(memcookies)
    },
    success: function(data, textStatus, request){
        var newcookies = JSON.parse(request.getResponseHeader('x-cookies'));
        jQuery.extend(memcookies, newcookies);
    }
});

2. Automatically, by patching XMLHttpRequest

var memcookies = require('memcookies/client');
memcookies.setCookies(initialCookiesJSON);
memcookies.patchXhr();

This will hook into each request and response and automatically persist the cookies on the client side for you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.