27.0.28 • Published 11 months ago

@meetup/mwp-cookie v27.0.28

Weekly downloads
31
License
MIT
Repository
github
Last release
11 months ago

mwp-cookie

A cookie management library

Writing cookies in React - <SetCookie />

To support writing cookies both on the server and the client in a 'universal' React application, use the <SetCookie /> component in src/SetCookie.jsx.

In the client, this component will write to window.document.cookie every time it is rendered, using the supplied props to configure the cookie behavior (e.g. time-to-live, domain). On the server, this component exposes the props for each instance rendered by ReactDOMServer.renderToString() or .renderToStaticMarkup through a SetCookie.rewind() static interface.

In your application code, a basic <SetCookie /> requires a name prop and the string value as the element's only child.

<SetCookie name="MY_COOKIE">my cookie value</SetCookie>

This component does not currently read cookies.

Props

<SetCookie name="MY_COOKIE" ttl=1234 isHttpOnly isSecure path='/foo' domain='foo.meetup.com'>
  My cookie value
</SetCookie>

name: string

Required. The name of the cookie to write

children: string

The value of the cookie.

ttl: number

Optional. Time to live in milliseconds. Will be used to write cookie's max-age and/or 'expires' header, as appropriate. If not supplied, the cookie will be a session cookie that expires when the browser is closed.

isHttpOnly: boolean

Optional - default false. Cookies that are only used on the server should use this prop to avoid any interaction with client code.

This should be used for most cookies that are used for designating Fastly backends, e.g. when replatforming a Meetup feature.

isSecure: boolean

Optional - default true. This cookie will only be sent by the browser over a secure (HTTPS) connection. It should almost never be set to false.

path: string

Optional - default '/'. The URL root path on which this cookie will be sent by the browser. The default will make this cookie available across the whole site, which is generally the expected cookie behavior.

domain: string

Optional - default '.meetup.com' The domain on which the cookie will be served. The default will supply the cookie on all subdomains (including dev), which is generally the expected cookie behavior.

Recipes

Universal cookie setting

'Setting a cookie' during server-side rendering specifically means returning a Set-Cookie header to the client along with the response body - it's a side effect of the render. In the browser, setting a cookie means assigning a new window.document.cookie string.

On the server, the rendering function needs to access the cookie data after rendering, but before returning the response in order to set the approppriate header.

In Hapi, the code for a request handler might look like this:

const SetCookie = require('@meetup/mwp-cookie/lib/SetCookie');
const App = require('./path/to/my/App.jsx'); // App renders multiple '<SetCookie />' instances

const handler = (request, h) => {
	const markup = ReactDOMServer.renderToString(<App />);
	const response = h.response(markup);

	const cookieMap = SetCookie.rewind();
	Object.keys(cookieMap).forEach(name => {
		const { value, ...options } = cookieMap[name];
		// assign new 'Set-Cookie' header per cookie in the map
		response.state(name, value, options);
	});

	return response;
};

On the client, the updates to window.document.cookie are handled internally - just render the <SetCookie /> element.

React.render(document.body, <App />);

Server-side-only cookie (httpOnly)

If you don't want the client to interact with a cookie at all, pass in the isHttpOnly boolean prop.

<SetCookie name="MY_COOKIE" isHttpOnly>
	my cookie value not visible to client code
</SetCookie>

Client-side-only cookie

The <SetCookie /> element is generally the wrong abstraction for setting cookies on the client, since client-side cookie setting is by definition done with callbacks (e.g. componentDidMount, onClick) that do not need to interact with app rendering.

We recommend using js-cookie in these cases, with its SetCooke.set() method.

27.0.35-beta

11 months ago

27.0.34-beta

11 months ago

27.0.33-beta

12 months ago

27.0.36-beta

11 months ago

27.0.16

1 year ago

27.0.28

1 year ago

27.0.26

1 year ago

27.0.23

1 year ago

27.0.22

1 year ago

27.0.27-beta

1 year ago

27.0.25-beta

1 year ago

26.1.30-beta

1 year ago

26.1.32-beta

1 year ago

26.1.10-beta

1 year ago

26.1.11

1 year ago

26.1.24-beta

1 year ago

27.0.15-beta

1 year ago

26.0.3572-beta

1 year ago

26.0.3573-beta

1 year ago

26.0.3554-beta

2 years ago

26.0.3569-beta

2 years ago

26.0.3570-beta

2 years ago

26.0.3557-beta

2 years ago

26.0.3566-beta

2 years ago

26.0.3556

2 years ago

26.0.3571-beta

2 years ago

26.0.3562-beta

2 years ago

26.0.3555-beta

2 years ago

26.0.3565-beta

2 years ago

26.0.3558-beta

2 years ago

26.0.3561-beta

2 years ago

26.0.3563-beta

2 years ago

26.0.3560-beta

2 years ago

26.0.3567-beta

2 years ago

26.0.3568-beta

2 years ago

26.0.3564-beta

2 years ago

26.0.3559-beta

2 years ago

26.0.3544-beta

2 years ago

26.0.3536-beta

2 years ago

26.0.3534-beta

2 years ago

26.0.3532-beta

2 years ago

26.0.3546-beta

2 years ago

26.0.3537-beta

2 years ago

26.0.3542-beta

2 years ago

26.0.3541-beta

2 years ago

26.0.3533-beta

2 years ago

26.0.3549-beta

2 years ago

26.0.3550-beta

2 years ago

26.0.3545-beta

2 years ago

26.0.3535-beta

2 years ago

26.0.3553-beta

2 years ago

26.0.3548-beta

2 years ago

26.0.3551-beta

2 years ago

26.0.3540-beta

2 years ago

26.0.3539-beta

2 years ago

26.0.3538-beta

2 years ago

26.0.3543-beta

2 years ago

26.0.3552-beta

2 years ago

26.0.3547-beta

2 years ago

26.0.3506-beta

2 years ago

26.0.3526-beta

2 years ago

26.0.3499-beta

2 years ago

26.0.3486-beta

2 years ago

26.0.3524-beta

2 years ago

26.0.3511-beta

2 years ago

26.0.3529-beta

2 years ago

26.0.3501-beta

2 years ago

26.0.3503-beta

2 years ago

26.0.3528-beta

2 years ago

26.0.3519-beta

2 years ago

26.0.3512-beta

2 years ago

26.0.3497-beta

2 years ago

26.0.3513-beta

2 years ago

26.0.3491-beta

2 years ago

26.0.3498-beta

2 years ago

26.0.3508-beta

2 years ago

26.0.3490-beta

2 years ago

26.0.3489-beta

2 years ago

26.0.3521-beta

2 years ago

26.0.3516-beta

2 years ago

26.0.3494-beta

2 years ago

26.0.3525-beta

2 years ago

26.0.3500-beta

2 years ago

26.0.3485-beta

2 years ago

26.0.3507-beta

2 years ago

26.0.3530-beta

2 years ago

26.0.3517-beta

2 years ago

26.0.3505-beta

2 years ago

26.0.3527-beta

2 years ago

26.0.3495-beta

2 years ago

26.0.3515-beta

2 years ago

26.0.3520-beta

2 years ago

26.0.3493-beta

2 years ago

26.0.3522-beta

2 years ago

26.0.3509-beta

2 years ago

26.0.3488-beta

2 years ago

26.0.3523-beta

2 years ago

26.0.3487-beta

2 years ago

26.0.3514-beta

2 years ago

26.0.3496-beta

2 years ago

26.0.3531-beta

2 years ago

26.0.3492-beta

2 years ago

26.0.3456-beta

2 years ago

26.0.3466-beta

2 years ago

26.0.3484-beta

2 years ago

26.0.3464-beta

2 years ago

26.0.3474-beta

2 years ago

26.0.3481-beta

2 years ago

26.0.3476-beta

2 years ago

26.0.3453-beta

2 years ago

26.0.3482-beta

2 years ago

26.0.3468-beta

2 years ago

26.0.3473-beta

2 years ago

26.0.3469-beta

2 years ago

26.0.3461-beta

2 years ago

26.0.3458

2 years ago

26.0.3465-beta

2 years ago

26.0.3475-beta

2 years ago

26.0.3460-beta

2 years ago

26.0.3470-beta

2 years ago

26.0.3455-beta

2 years ago

26.0.3457-beta

2 years ago

26.0.3462-beta

2 years ago

26.0.3472-beta

2 years ago

26.0.3459-beta

2 years ago

26.0.3478-beta

2 years ago

26.0.3454-beta

2 years ago

26.0.3471-beta

2 years ago

26.0.3480-beta

2 years ago

26.0.3467-beta

2 years ago

26.0.3479-beta

2 years ago

26.0.3463-beta

2 years ago

26.0.3418-beta

2 years ago

26.0.3431-beta

2 years ago

26.0.3421-beta

2 years ago

26.0.3441-beta

2 years ago

26.0.3438-beta

2 years ago

26.0.3426-beta

2 years ago

26.0.3423-beta

2 years ago

26.0.3433-beta

2 years ago

26.0.3428-beta

2 years ago

26.0.3416-beta

2 years ago

26.0.3415-beta

2 years ago

26.0.3414

2 years ago

26.0.3424-beta

2 years ago

26.0.3439-beta

2 years ago

26.0.3448-beta

2 years ago

26.0.3420-beta

2 years ago

26.0.3419-beta

2 years ago

26.0.3436-beta

2 years ago

26.0.3449

2 years ago

26.0.3432-beta

2 years ago

26.0.3450-beta

2 years ago

26.0.3437-beta

2 years ago

26.0.3427-beta

2 years ago

26.0.3422-beta

2 years ago

26.0.3445-beta

2 years ago

26.0.3435-beta

2 years ago

26.0.3452-beta

2 years ago

26.0.3434-beta

2 years ago

26.0.3443-beta

2 years ago

26.0.3425-beta

2 years ago

26.0.3429-beta

2 years ago

26.0.3413-beta

2 years ago

26.0.3430-beta

2 years ago

26.0.3417-beta

2 years ago

26.0.3446-beta

2 years ago

26.0.3412-beta

2 years ago

26.0.3397-beta

2 years ago

26.0.3411-beta

2 years ago

26.0.3409-beta

2 years ago

26.0.3407-beta

2 years ago

26.0.3404-beta

2 years ago

26.0.3400-beta

2 years ago

26.0.3405-beta

2 years ago

26.0.3406-beta

2 years ago

26.0.3399-beta

2 years ago

26.0.3410-beta

2 years ago

26.0.3403-beta

2 years ago

26.0.3401-beta

2 years ago

25.2.3367-beta

2 years ago

25.2.3361-beta

2 years ago

26.0.3381-beta

2 years ago

26.0.3372

2 years ago

25.2.3348-beta

2 years ago

26.0.3387-beta

2 years ago

25.2.3370-beta

2 years ago

26.0.3396-beta

2 years ago

26.0.3391-beta

2 years ago

26.0.3393

2 years ago

26.0.3390

2 years ago

26.0.3371-beta

2 years ago

25.2.3351-beta

2 years ago

26.0.3386-beta

2 years ago

26.0.3383

2 years ago

25.2.3352-beta

2 years ago

26.0.3385

2 years ago

25.2.3366-beta

2 years ago

26.0.3384

2 years ago

26.0.3392-beta

2 years ago

26.0.3379-beta

2 years ago

25.2.3356-beta

2 years ago

26.0.3373-beta

2 years ago

25.2.3349

2 years ago

25.2.3368-beta

2 years ago

26.0.3382-beta

2 years ago

26.0.3389-beta

2 years ago

25.2.3363-beta

2 years ago

26.0.3380-beta

2 years ago

26.0.3375-beta

2 years ago

26.0.3377-beta

2 years ago

25.2.3358-beta

2 years ago

26.0.3394-beta

2 years ago

26.0.3374-beta

2 years ago

25.2.3354-beta

2 years ago

25.2.3355-beta

2 years ago

25.2.3359-beta

2 years ago

26.0.3395-beta

2 years ago

25.2.3353-beta

2 years ago

25.2.3350-beta

2 years ago

26.0.3376-beta

2 years ago

25.2.3362-beta

2 years ago

26.0.3388-beta

2 years ago

25.2.3369-beta

2 years ago

26.0.3378-beta

2 years ago

25.2.3357-beta

2 years ago

25.2.3360-beta

2 years ago

25.2.3329-beta

3 years ago

25.2.3342-beta

2 years ago

25.2.3338-beta

2 years ago

25.2.3332-beta

2 years ago

25.2.3322-beta

3 years ago

25.2.3333-beta

2 years ago

25.2.3319-beta

3 years ago

25.2.3334-beta

2 years ago

25.2.3337-beta

2 years ago

25.2.3345

2 years ago

25.2.3346-beta

2 years ago

25.2.3340-beta

2 years ago

25.2.3330-beta

3 years ago

25.2.3325-beta

3 years ago

25.2.3344-beta

2 years ago

25.2.3339-beta

2 years ago

25.2.3327-beta

3 years ago

25.2.3317-beta

3 years ago

25.2.3336-beta

2 years ago

25.2.3321

3 years ago

25.2.3326

3 years ago

25.2.3323

3 years ago

25.2.3335-beta

2 years ago

25.2.3320-beta

3 years ago

25.2.3318

3 years ago

25.2.3331-beta

3 years ago

25.2.3347-beta

2 years ago

25.2.3341-beta

2 years ago

25.2.3328-beta

3 years ago

25.2.3343-beta

2 years ago

25.2.3315-beta

3 years ago

25.2.3311-beta

3 years ago

25.2.3310-beta

3 years ago

25.2.3314

3 years ago

25.2.3312

3 years ago

25.2.3316

3 years ago

25.2.3309-beta

3 years ago

25.2.3308-beta

3 years ago

25.2.3307-beta

3 years ago

25.2.3306-beta

3 years ago

25.2.3298-beta

3 years ago

25.2.3304-beta

3 years ago

25.2.3305

3 years ago

25.2.3299-beta

3 years ago

25.2.3300-beta

3 years ago

25.2.3292-beta

3 years ago

25.2.3297-beta

3 years ago

25.2.3293-beta

3 years ago

25.2.3291-beta

3 years ago

25.2.3296-beta

3 years ago

25.2.3295

3 years ago

25.2.3294-beta

3 years ago

25.2.3288

3 years ago

25.2.3289

3 years ago

25.2.3287

3 years ago

25.2.3286

3 years ago

25.2.3285-beta

3 years ago

25.2.3284-beta

3 years ago

25.2.3283-beta

3 years ago

25.2.3282-beta

3 years ago

25.2.3281-beta

3 years ago

25.2.3280-beta

3 years ago

25.2.3279

3 years ago

25.2.3278-beta

3 years ago

25.2.3277-beta

3 years ago

25.2.3276

3 years ago

25.2.3275-beta

3 years ago

25.2.3273-beta

3 years ago

25.2.3274

3 years ago

25.2.3272

3 years ago

25.2.3269

3 years ago

25.2.3267-beta

3 years ago

25.2.3268-beta

3 years ago

25.2.3265-beta

3 years ago

25.2.3264

3 years ago

25.2.3263-beta

3 years ago

25.2.3259-beta

3 years ago

25.2.3261-beta

3 years ago

25.2.3257-beta

3 years ago

25.2.3258-beta

3 years ago

25.2.3252

4 years ago

25.2.3251-beta

4 years ago

25.2.3249-beta

4 years ago

25.2.3245-beta

4 years ago

25.2.3243-beta

4 years ago

25.2.3247-beta

4 years ago

25.2.3250-beta

4 years ago

25.2.3248-beta

4 years ago

25.2.3246-beta

4 years ago

25.2.3242-beta

4 years ago

25.2.3244-beta

4 years ago

25.2.3241-beta

4 years ago

25.2.3238-beta

4 years ago

25.2.3237-beta

4 years ago

25.2.3239-beta

4 years ago

25.2.3240-beta

4 years ago

25.2.3234-beta

4 years ago

25.2.3235-beta

4 years ago

25.2.3236-beta

4 years ago

25.2.3233-beta

4 years ago

25.2.3232-beta

4 years ago

25.2.3228

4 years ago

25.1.3226-beta

4 years ago

25.2.3230

4 years ago

25.2.3231

4 years ago

25.1.3225-beta

4 years ago

25.1.3227

4 years ago

25.1.3224

4 years ago

25.1.3223-beta

4 years ago

25.1.3214-beta

4 years ago

25.1.3218

4 years ago

25.1.3221-beta

4 years ago

25.1.3217-beta

4 years ago

25.1.3219-beta

4 years ago

25.1.3222

4 years ago

25.1.3220

4 years ago

25.1.3210-beta

4 years ago

25.1.3209-beta

4 years ago

25.1.3208-beta

4 years ago

25.1.3212

4 years ago

25.1.3211-beta

4 years ago

25.1.3213-beta

4 years ago

25.1.3206-beta

4 years ago

25.1.3205

4 years ago

25.0.3201-beta

4 years ago

25.1.3204-beta

4 years ago

25.0.3202

4 years ago

25.0.3203-beta

4 years ago

25.0.3198-beta

4 years ago

25.0.3199

4 years ago

25.0.3194

4 years ago

25.0.3193-beta

4 years ago

24.0.3191-beta

4 years ago

24.0.3192

4 years ago

24.0.3189-beta

4 years ago

24.0.3190

4 years ago

24.0.3187-beta

4 years ago

24.0.3188

4 years ago

24.0.3186

4 years ago

24.0.3185-beta

4 years ago

24.0.3184

4 years ago

24.0.3182-beta

4 years ago

24.0.3183-beta

4 years ago

24.0.3181

4 years ago

24.0.3180

4 years ago

24.0.3179-beta

4 years ago

24.0.3178-beta

4 years ago

24.0.3177-beta

4 years ago

24.0.3176

4 years ago

24.0.3175

4 years ago

24.0.3174-beta

4 years ago

24.0.3171

4 years ago

24.0.3170-beta

4 years ago

24.0.3169-beta

4 years ago

24.0.3167-beta

4 years ago

24.0.3168

4 years ago

24.0.3166

4 years ago

24.0.3165-beta

4 years ago

24.0.3164

4 years ago

24.0.3163-beta

4 years ago

23.0.3159

4 years ago

23.0.3158-beta

4 years ago

22.4.3157-beta

4 years ago

22.4.3156

4 years ago

22.4.3145

4 years ago

22.4.3143

4 years ago

22.4.3139-beta

4 years ago

22.4.3141-beta

4 years ago

22.4.3138

4 years ago

22.4.3137-beta

4 years ago

22.4.3134-beta

4 years ago

22.4.3132-beta

4 years ago

22.4.3135-beta

4 years ago

22.4.3136

4 years ago

22.4.3133

4 years ago

22.4.3129-beta

4 years ago

22.4.3130

4 years ago

22.4.3127-beta

4 years ago

22.4.3125-beta

4 years ago

22.4.3128

4 years ago

22.4.3124

4 years ago

22.4.3126

4 years ago

22.4.3123

4 years ago

22.4.3119

4 years ago

22.4.3117-beta

4 years ago

22.4.3115

4 years ago

22.4.3111

4 years ago

22.4.3108

4 years ago

22.4.3109

4 years ago

22.4.3118-beta

4 years ago

22.4.3116-beta

4 years ago

22.4.3122-beta

4 years ago

22.4.3106-beta

4 years ago

22.4.3120

4 years ago

22.4.3121

4 years ago

22.4.3107-beta

4 years ago

22.4.3100

4 years ago

22.4.3098

4 years ago

22.4.3099-beta

4 years ago

22.4.3097-beta

4 years ago

22.4.3096

5 years ago

22.4.3095-beta

5 years ago

22.4.3094-beta

5 years ago

22.4.3093-beta

5 years ago

22.4.3092-beta

5 years ago

22.4.3091-beta

5 years ago

22.4.3090-beta

5 years ago

22.4.3086-beta

5 years ago

22.4.3087-beta

5 years ago

22.4.3085

5 years ago

22.4.3084-beta

5 years ago

22.4.3083-beta

5 years ago

22.4.3082-beta

5 years ago

22.4.3081

5 years ago

22.4.3080-beta

5 years ago

22.4.3079-beta

5 years ago

22.4.3077

5 years ago

22.4.3078

5 years ago

22.4.3076-beta

5 years ago

22.4.3075

5 years ago

22.4.3074-beta

5 years ago

22.4.3073

5 years ago

22.4.3072-beta

5 years ago

22.4.3071-beta

5 years ago

22.4.3067-beta

5 years ago

22.4.3065-beta

5 years ago

22.4.3064-beta

5 years ago

22.4.3063-beta

5 years ago

22.4.3062-beta

5 years ago

22.4.3061-beta

5 years ago

22.4.3058-beta

5 years ago

22.4.3057

5 years ago

22.4.3056-beta

5 years ago

22.4.3054-beta

5 years ago

22.4.3053-beta

5 years ago

22.4.3052-beta

5 years ago

22.4.3051-beta

5 years ago

22.4.3046

5 years ago

22.4.3045-beta

5 years ago

22.4.3044-beta

5 years ago

22.3.3043

5 years ago

22.3.3042-beta

5 years ago

22.3.3040-beta

5 years ago

22.3.3039

5 years ago

22.3.3038

5 years ago

22.3.3037-beta

5 years ago

22.3.3036-beta

5 years ago

22.3.3035

5 years ago

22.3.3034-beta

5 years ago

22.3.3033-beta

5 years ago

22.3.3032-beta

5 years ago

22.3.3031-beta

5 years ago

22.3.3030-beta

5 years ago

22.3.3027-beta

5 years ago

22.3.3025

5 years ago

22.3.3022-beta

5 years ago

22.3.3021

5 years ago

22.3.3018

5 years ago

22.3.3017-beta

5 years ago

22.3.3016-beta

5 years ago

22.3.3014-beta

5 years ago

22.3.3013-beta

5 years ago

22.3.3012

5 years ago

22.3.3011-beta

5 years ago

22.3.3010-beta

5 years ago

22.3.3009

5 years ago

22.3.3008-beta

5 years ago

22.3.3007

5 years ago

22.3.3006-beta

5 years ago

22.3.3005-beta

5 years ago

22.3.3004

5 years ago

22.3.3003

5 years ago

22.3.3002-beta

5 years ago

22.3.3001

5 years ago

22.3.3000

5 years ago

22.3.2999-beta

5 years ago

22.2.2998-beta

5 years ago

22.2.2997

5 years ago

22.2.2996-beta

5 years ago

22.2.2995-beta

5 years ago

22.2.2994

5 years ago

22.2.2993

5 years ago

22.1.2992

5 years ago

22.1.2991-beta

5 years ago

22.2.2990-beta

5 years ago

22.1.2989

5 years ago

22.1.2988-beta

5 years ago

22.1.2987-beta

5 years ago

22.1.2986

5 years ago

22.0.2985

5 years ago

22.0.2984-beta

5 years ago

22.0.2983

5 years ago

21.3.2982

5 years ago

21.3.2981-beta

5 years ago

21.3.2980

5 years ago

21.3.2979-beta

5 years ago

21.3.2978

5 years ago

21.3.2977-beta

5 years ago

21.3.2976

5 years ago

21.3.2974

5 years ago

21.3.2973-beta

5 years ago

21.3.2972

5 years ago

21.3.2971-beta

5 years ago

21.3.2970-beta

5 years ago

21.3.2969-beta

5 years ago

21.3.2968-beta

5 years ago

21.3.2967-beta

5 years ago

21.3.2966-beta

5 years ago

21.3.2965-beta

5 years ago

21.3.2961-beta

5 years ago

0.0.2

5 years ago

21.3.2948-beta

5 years ago

0.0.1

5 years ago