我正在努力使用Swift 3将cookie设置为WKWebView.我找不到任何使用Swift 3的例子,所以使用Swift - 如何在NSMutableURLRequest中设置cookie作为起点,这就是我所拥有的:
let url = URL(string: "https://s3-us-west-2.amazonaws.com/foo/helloworld.html")
/* Create cookie and place in cookie storage */
let cookieStorage = HTTPCookieStorage.shared
let cookieHeaderField = ["Set-Cookie": "somecookie=" + cookieString + ";"]
let cookie = HTTPCookie.cookies(withResponseHeaderFields: cookieHeaderField, for: url!)
cookieStorage.setCookies(cookie, for: url, mainDocumentURL: nil)
let urlRequest = URLRequest.init(url: url!)
theWebView.load(urlRequest)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用模拟器并使用Safari Develop进行检查时,它表示我没有设置cookie.关于我搞砸了什么或者我没有考虑到的想法?
我正在使用Java 8,Wildfly 11,Spring 4和Apache 2.4.我有这个Java代码来设置会话cookie
cookie = new Cookie(SESSION_ID_KEY, sessionId);
...
final String domain = request.getServerName().indexOf(".") == -1 ? request.getServerName() : request.getServerName().substring(request.getServerName().indexOf(".") + 1, request.getServerName().length());
if (!StringUtils.equals(domain, "localhost") && !isIpAddress)
{
cookie.setDomain(domain.indexOf('.') > -1 ? "." + domain : domain);
} // if
final String contextPath = request.getContextPath() != null && request.getContextPath().endsWith("/") ? request.getContextPath().substring(0, request.getContextPath().length() - 1): request.getContextPath();
cookie.setPath(contextPath);
System.out.println("setting domain " + domain + " and context path:" + contextPath);
response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)
我在浏览器中注意到这个cookie没有被创建.然后我看了Postman,注意到没有创建cookie,虽然我看到这些响应标题......
Set-Cookie ?MY.SESSION.ID=10c25010534c4dd3900851ec1dfaebeb; path=/context; domain=.compute-1.amazonaws.com
Set-Cookie ?closeTrialNoteDialog=""; Max-Age=0; …Run Code Online (Sandbox Code Playgroud) 我在 localhost:3333 上使用带有 cookie 解析器中间件的 Express 框架的 NodeJS。我的前端由 localhost:3000 上的 react dev 服务器提供服务。这是我第一次尝试使用 cookie。以下是我为 cookie 设置的选项:{ expires: maxAge , httpOnly: true, sameSite: 'none', secure: true, domain: null }。我也尝试过使用和不使用 sameSite、httpOnly 和安全选项。以及域=本地主机。
这是我在尝试设置 cookie 时得到的 http 响应的标头:
Set-Cookie:
sessionid=119faa6a3fcfab0628998ff2592e04ceb06cda12; Path=/; Expires=Sun, 29 Jan 2023 15:20:16 GMT; HttpOnly; Secure; SameSite=None
Run Code Online (Sandbox Code Playgroud)
但问题是 cookie 没有出现在 Chrome 的 Application/Cookies 或 Firefox 的 Storage/Cookies 中。我也无法访问 cookie 作为不同端点上的请求 cookie。然而,它确实适用于我的 vps。vps 使用正确的域名和代理,因此所有请求似乎都来自同一个域/端口,我不知道这是否有所不同。
我还尝试将 127.0.0.1 dev.mylocalhost.com 添加到 /etc/hosts 以在 localhost 上伪造域名。只是阅读一些关于此的内容,不太确定它应该如何工作。我不拥有这个域,这只是在我本地的 /etc/hosts 文件中。我还没有尝试在本地主机上使用代理,所以 cookie 是从服务器上的端口 3333 上设置的,而客户端在端口 3000 …
我们有以下配置:
testing.parentdomain.com
当您访问该域并创建一个购物篮时,我们会创建一个存储该购物篮价值的 cookie。cookie 域设置为.testing.parentdomain.com,它是 Httponly 并且有一个路径/
我们有一个想要访问 cookie 的子域。subdomain.testing.parentdomain.com
此子域调用父域上的端点,例如:testing.parentdomain.com/basketData。此调用是返回 JSON 的 GET 请求。
问题
问题是子域在发出请求时似乎没有发送 cookie 值,因此我们没有得到预期的响应。
尝试
查看其他问题,我们尝试过 CORS 和凭证更改。
作为附加说明,我们将以下 JS 与 webpack/babel 捆绑在一起。
我们的请求来自 AJAX,如下所示:
$.ajax({
url: url,
type: 'GET',
xhrFields: {
withCredentials: true
},
crossDomain: true
})
Run Code Online (Sandbox Code Playgroud)
服务器为子域和允许凭据设置了 CORS。在响应中,我们可以看到这些被返回。
access-control-allow-credentials: true
access-control-allow-origin:从上面的子域
是否有任何原因未将 cookie 与请求一起发送到父域?我们已经注销了服务器端响应中的 cookie,但它们并不像我们预期的那样存在。
:authority: testing.parentdomain.com
:method: GET
:path: /basket/data/
:scheme: https
accept: /
accept-encoding: gzip, deflate, br
accept-language: en-GB,en;q=0.9, en-US;q=0.8
来源:https
://subdomain.testing.parentdomain.com …
我正在调试Magento系统的问题.
问题是重复的Set-Cookie标头,如下所示:
Set-Cookie: flimmit_session=search-0c30086b812519b006aa27ef4f37f15b-24; path=/; domain=.flimmit.com; httponly
Set-Cookie: flimmit_session=search-0c30086b812519b006aa27ef4f37f15b-24; path=/; domain=.flimmit.com; httponly
Run Code Online (Sandbox Code Playgroud)
使用php的setcookie命令设置cookie.我的问题是,错误使用此函数是否会导致重复的Set-Cookie标头,或者我是否必须在其他地方查找错误...
我无法从设置页面以外的任何页面访问cookie.我查看print_r($_COOKIE)了不同的页面,页面之间唯一的常见变量是$_COOKIE['PHPSESSID'].
我正在开发一个本地XAMPP测试服务器.是否有我应该在PHP.ini上更改的设置,或者这是cookie的正常行为?对不起,我对这些东西有点新鲜,我觉得饼干可以在网站上访问.
我正在设置饼干:
setcookie("user", "Dave Schmave", time()+60*60*24*120);
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.谢谢
这个问题与NodeJS + Express有关 -将会话中间件应用到我认为可以解决我的问题的一些路线.但事实并非如此.
我正在尝试构建一个站点,其中第一个默认页面显示有关需要使用cookie的站点的用户信息,并让他有可能接受这个.因此,我不希望服务器在用户接受之前发送set-cookie标头.
正如在上面问题的解决方案中,我现在尝试将会话作为中间件插入到应该拥有它的路由中.问题是这样做我从来没有从服务器获得任何set-cookie标头.用Fiddler检查过这个.
我的代码看起来像这样(只有相关部分):
var express = require('express');
var app = express();
var session = require('express-session');
var mongoose = require('mongoose');
var configDB = require('./config/database.js');
var mongoStore = require('connect-mongo')(session);
mongoose.connect(configDB.url);
var mongoSessionStore = new mongoStore({
mongoose_connection: mongoose.connections[0]
});
.
.
.
var sessionMiddleware = session({
secret: 'secret',
store: mongoSessionStore,
key: 'express.sessionID',
cookie: {domain: 'the-domain', path: '/', httpOnly: true, secure: false, maxAge: null },
saveUninitialized: false,
resave: false
});
require('./app/routes.js')(app, passport, sessionMiddleware);
Run Code Online (Sandbox Code Playgroud)
并且路径看起来像这样,在单独的文件中: …
最近,Safari 11在Mac OSX上发布.此更新导致我们的Web应用程序与我们的reuest标头上的XSRF结合使用时出现问题.我将尝试以逻辑方式描述问题.这就是好情况的样子:
当用户想要登录时,他从服务器接收带有Set-Cookie的响应,该Set-Cookie包含XSRF令牌的值. Eg: Set-Cookie: XSRF-TOKEN=LKNBX4DZhL708KjXNkgXnlxTDCNuhsZG1kTc2SFy498; Path=/; Secure
页面刷新将执行的下一个调用包含标头中的正确XSRF值.在服务器端,检查值等.来自前端的每个调用都将包含该XSRF令牌.
如果用户注销并想再次登录,则他的XSRF cookie将被新值覆盖,并且能够使用该令牌登录.
我们的问题情况(在Mac OSX上使用Safari 11,其他浏览器不显示此行为):
如果没有cookie存在,用户可以正常登录
但是,如果他想重新登录(在上一个会话之后),则会进行刷新.在第一次调用时,刷新其调用的XSRF令牌不会被新值替换,它们仍然包含来自前一会话的旧XSRF令牌.当我们检查此请求时,我们看到此请求中的cookie包含正确的值,但标头反映了旧令牌.
使用错误标题的此调用会导致会话在后端关闭,因此用户将被踢出会话.TLDR; 在Safari 11中,标题XSRF-TOKEN在刷新后不会相应地更新cookie值.我们在旧版本和其他浏览器上工作,我们认为这是一个Safar 11错误.
还有其他人遇到过类似的问题吗?在Safari 11中刷新页面后,请求的标头值是否未更新?
编辑:经过测试,我们发现在URL中放置时间戳作为查询参数会强制Safari 11发送正确的请求.似乎缓存了一些请求并忽略了更新的标头.
非常感谢!
我遇到了与此处讨论的类似问题:https : //github.com/request/request-promise/issues/183
我正在使用 Request-Promise@4.2.2 和 Tough-Cookie@2.3.4
并得到同样的错误:
类型错误:str.trim 不是函数
我也玩过 npm-dedupe
任何线索,
我的代码如下所示:
let cookie = new tough.Cookie({domain: '.companyName.ninja',
httpOnly: true,
name: '_application_session',
path: '/',
secure: false,
value: 'f044888d39e2d19126716d9f54028700' })
let cookieJar = request.jar()
cookieJar.setCookie(cookie, 'http://application.companyName.ninja/')
options.jar = cookieJar
Run Code Online (Sandbox Code Playgroud) 我正在使用ngx-cookie-service包来存储一些与我的应用程序相关的数据。我需要将此 cookie 保存在基本路径上'/',因此每次我都确切地知道如何检索它。我的这个 cookie 需要更新,当发生这种情况时,新的 cookie 必须存储在相同的路径中(所以在 中'/')。问题是,有时当我刷新页面时,新的 cookie 会保存在新路径中,因此当我尝试用它检索它时this.cookieService.get(cookieName, '/')显然会失败。尽管我明确声明使用'/'as path ,但还是会发生这种情况。它并不总是发生,这会导致调试更加困难。
这是我使用cookies的服务
const urlParamsCookieName = 'errepiuapp-url-params';
/**
* This service keeps track of the keys used to retrieve objects from the backend.
*/
@Injectable({
providedIn: 'root'
})
export class KeyLookupService {
private _lookupUrlSegments = ['students', 'macro', 'lto', 'sto', 'reports'];
private _paramsMap$: BehaviorSubject<Map<string, any>>;
private get paramsMap() {
return this._paramsMap$.getValue()
}
constructor(
private cookieService: CookieService,
private router: …Run Code Online (Sandbox Code Playgroud) cookies setcookie angular-cookies angular ngx-cookie-service