https://github.com/react-native-cookies/cookies
🍪 Cookie Manager for React Native
https://github.com/react-native-cookies/cookies
android cookies ios react-native
Last synced: 6 months ago
JSON representation
🍪 Cookie Manager for React Native
- Host: GitHub
- URL: https://github.com/react-native-cookies/cookies
- Owner: react-native-cookies
- License: mit
- Created: 2020-01-09T22:51:10.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-07-11T23:59:51.000Z (about 1 year ago)
- Last Synced: 2025-04-05T04:30:02.695Z (6 months ago)
- Topics: android, cookies, ios, react-native
- Language: Java
- Homepage:
- Size: 415 KB
- Stars: 496
- Watchers: 5
- Forks: 97
- Open Issues: 84
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# React Native Cookies - A Cookie Manager for React Native
Cookie Manager for React Native
This module was ported from [joeferraro/react-native-cookies](https://github.com/joeferraro/react-native-cookies). This would not exist without the work of the original author, [Joe Ferraro](https://github.com/joeferraro).
## Important notices & Breaking Changes
- **v6.0.0**: Package name updated to `@react-native-cookies/cookies`.
- **v5.0.0**: Peer Dependency of >= React Native 0.60.2
- **v4.0.0**: Android SDK version bumpted to 21
- **v3.0.0**: Remove React Native Core dependencies, CookieManager.set() support for Android
- **v2.0.0**: Package name updated to `@react-native-community/cookies`.## Maintainers
- [Jason Safaiyeh](https://github.com/safaiyeh) ([Twitter @safaiyeh](https://twitter.com/safaiyeh)) from [🪄 Magic Eden](https://magiceden.io)
## Platforms Supported
- ✅ iOS
- ✅ Android
- ❌ Currently lacking support for Windows, macOS, and web. Support for these platforms will be created when there is a need for them. Starts with a posted issue.## Expo
- ✅ You can use this library with [Development Builds](https://docs.expo.dev/development/introduction/). No config plugin is required.
- ❌ This library can't be used in the "Expo Go" app because it [requires custom native code](https://docs.expo.dev/workflow/customizing/).## Installation
```
yarn add @react-native-cookies/cookies
```Then link the native iOS package
```
npx pod-install
```## Usage
A cookie object can have one of the following fields:
```typescript
export interface Cookie {
name: string;
value: string;
path?: string;
domain?: string;
version?: string;
expires?: string;
secure?: boolean;
httpOnly?: boolean;
}export interface Cookies {
[key: string]: Cookie;
}
``````javascript
import CookieManager from '@react-native-cookies/cookies';// set a cookie
CookieManager.set('http://example.com', {
name: 'myCookie',
value: 'myValue',
domain: 'some domain',
path: '/',
version: '1',
expires: '2015-05-30T12:30:00.00-05:00'
}).then((done) => {
console.log('CookieManager.set =>', done);
});*NB:* When no `domain` is specified, url host will be used instead.
*NB:* When no `path` is specified, an empty path `/` will be assumed.// Set cookies from a response header
// This allows you to put the full string provided by a server's Set-Cookie
// response header directly into the cookie store.
CookieManager.setFromResponse(
'http://example.com',
'user_session=abcdefg; path=/; expires=Thu, 1 Jan 2030 00:00:00 -0000; secure; HttpOnly')
.then((success) => {
console.log('CookieManager.setFromResponse =>', success);
});// Get cookies for a url
CookieManager.get('http://example.com')
.then((cookies) => {
console.log('CookieManager.get =>', cookies);
});// list cookies (IOS ONLY)
CookieManager.getAll()
.then((cookies) => {
console.log('CookieManager.getAll =>', cookies);
});// clear cookies
CookieManager.clearAll()
.then((success) => {
console.log('CookieManager.clearAll =>', success);
});// clear a specific cookie by its name (IOS ONLY)
CookieManager.clearByName('http://example.com', 'cookie_name')
.then((success) => {
console.log('CookieManager.clearByName =>', success);
});// flush cookies (ANDROID ONLY)
CookieManager.flush()
.then((success) => {
console.log('CookieManager.flush =>', success);
});// Remove session cookies (ANDROID ONLY)
// Session cookies are cookies with no expires set. Android typically does not
// remove these, it is up to the developer to decide when to remove them.
// The return value is true if any session cookies were removed.
// iOS handles removal of session cookies automatically on app open.
CookieManager.removeSessionCookies()
.then((sessionCookiesRemoved) => {
console.log('CookieManager.removeSessionCookies =>', sessionCookiesRemoved);
});
```### WebKit-Support (iOS only)
React Native comes with a WebView component, which uses UIWebView on iOS. Introduced in iOS 8 Apple implemented the WebKit-Support with all the performance boost.
Prior to WebKit-Support, cookies would have been stored in `NSHTTPCookieStorage` and sharedCookiesEnabled must be set on webviews to ensure access to them.
With WebKit-Support, cookies are stored in a separate webview store `WKHTTPCookieStore` and not necessarily shared with other http requests. Caveat is that this store is available upon mounting the component but not necessarily prior so any attempts to set a cookie too early may result in a false positive.
To use WebKit-Support, you should be able to simply make advantage of the react-native-webview as is OR alternatively use the webview component like [react-native-wkwebview](https://github.com/CRAlpha/react-native-wkwebview).
To use this _CookieManager_ with WebKit-Support we extended the interface with the attribute `useWebKit` (a boolean value, default: `FALSE`) for the following methods:
| Method | WebKit-Support | Method-Signature |
| ----------- | -------------- | ------------------------------------------------------------------------ |
| getAll | Yes | `CookieManager.getAll(useWebKit:boolean)` |
| clearAll | Yes | `CookieManager.clearAll(useWebKit:boolean)` |
| clearByName | Yes | `CookieManager.clearByName(url:string, name: string, useWebKit:boolean)` |
| get | Yes | `CookieManager.get(url:string, useWebKit:boolean)` |
| set | Yes | `CookieManager.set(url:string, cookie:object, useWebKit:boolean)` |##### Usage
```javascript
import CookieManager from '@react-native-cookies/cookies';const useWebKit = true;
// list cookies (IOS ONLY)
CookieManager.getAll(useWebKit)
.then((cookies) => {
console.log('CookieManager.getAll from webkit-view =>', cookies);
});// clear cookies
CookieManager.clearAll(useWebKit)
.then((succcess) => {
console.log('CookieManager.clearAll from webkit-view =>', succcess);
});// clear cookies with name (IOS ONLY)
CookieManager.clearByName('http://example.com', 'cookie name', useWebKit)
.then((succcess) => {
console.log('CookieManager.clearByName from webkit-view =>', succcess);
});// Get cookies as a request header string
CookieManager.get('http://example.com', useWebKit)
.then((cookies) => {
console.log('CookieManager.get from webkit-view =>', cookies);
});// set a cookie
const newCookie: = {
name: 'myCookie',
value: 'myValue',
domain: 'some domain',
path: '/',
version: '1',
expires: '2015-05-30T12:30:00.00-05:00'
};CookieManager.set('http://example.com', newCookie, useWebKit)
.then((res) => {
console.log('CookieManager.set from webkit-view =>', res);
});
```