未在iOS Safari或Chrome浏览器中设置或发送请求的Cookie可以在所有Android和桌面浏览器上使用

问题描述 投票:5回答:1

我使用在后端制作的set-cookie标头在设备上设置一个仅HTTP的安全cookie。在桌面Safari,Chrome,FF,IE等上,它的工作原理非常吸引人。在Android Chrome上,它也可以工作。但是,当我尝试从iOS上的移动Safari或Chrome浏览器中的Web应用程序运行相同的确切代码时,请求中未发送任何cookie,因此我的Web应用程序无法正常工作。

我尝试查看其他堆栈溢出答案和问题,并尝试修改设置并测试是否有几种不同的iOS设备。我希望我的网络应用程序能够正常运行,而无需修改默认的iOS Safari设置。我真的不明白为什么iOS无法正常运作..因为这种行为似乎是空前的。

发布带有令牌的cookie

(authorization.py)

#creates the cookie string for the response
def setCookie(name, value, expires='', domain=None,
    secure=False, httponly=False, path=None):
    morsel = cookies.Morsel()
    # morsel.set(name, value, quote(value))
    morsel.set(name, value, value)
    expires = datetime.utcnow() + timedelta(days=365)
    expireStr = expires.strftime("%a, %d %b %Y %X GMT")
    print(expireStr)
    morsel['expires'] = expireStr
    if path:
        morsel['path'] = path
    if domain:
        morsel['domain'] = domain
    if secure:
        morsel['secure'] = secure
    value = morsel.OutputString()
    if httponly:
        value += '; httponly'
    print(value)
    return value

def issueCookieTokens(userData):
    accessToken = issueAccessToken(userData).decode('utf-8')
    refreshToken = issueRefreshToken(userData).decode('utf-8')
    tokens = {'accessToken': accessToken, 'refreshToken': refreshToken}
    return setCookie('tokens', json.dumps(tokens), path= '/', secure=True, httponly=True)

(customfuncs.py)

headers = {
      'Access-Control-Allow-Origin': 'REDACtED',
      'Access-Control-Allow-Credentials': True
}

def makeHeader(cookieVal):
    newHeader = headers
    print("cookieVal: " + cookieVal)
    newHeader['Set-Cookie'] = cookieVal
    print(newHeader['Set-Cookie'])
    return newHeader

(我在其中返回响应)

创建响应以返回设备

response = {"statusCode": 200,
"headers": customfuncs.makeHeader(authorization.issueCookieTokens(userItem)),
"body": json.dumps({'Item': userItem}, cls=decimalencoder.DecimalEncoder)}
return response

我希望我的响应能够成功返回,并将我的json包含在返回正文中,并成功返回一个标头,该标头使用set-cookie标头设置一个cookie,以存储一个安全的,仅HTTP的cookie,该cookie存储我的访问/刷新令牌用户。 Cookie也应在后续请求中发送。如果您想自己进行测试,则站点为https://swipeme.in。我在登录和注册期间存储cookie。测试cookie设置并发送回cookie的最佳方法是在注册过程中以及在下一个请求中(照片上传)。

cookies http-headers mobile-safari mobile-website setcookie
1个回答
0
投票

遇到相同的问题,这是由于路径所致,再次将其设置为'/'是很好:

// caused problem:
let path = req.headers.host   //  setting this will allow it to be passed to subdomains

// ok:
// let path = '/'       
...
res.cookie( COOKIE_HTTPONLY_JWT, jwttoken, jwtopts ) 
© www.soinside.com 2019 - 2024. All rights reserved.