对于浏览器而言,(可配置的)10分钟时间段是一个滑动窗口。每次CouchDB响应请求时,它都会将cookie更新为一个新值,有效地刷新登录状态。
对于客户端而言,在看到Set-Cookie
头信息时,你必须记得重置cookie的值(或在你的情况下将其传递给你自己的客户端)。
举个例子,我将超时时间设置为30秒:
$ curl http://admin:admin@localhost:5984/_config/couch_httpd_auth/timeout
"30"
接下来我将会:
- 登录
- 稍等一段时间
- 在超时之前通过 cookie 检查我的会话
- 等待超时
- 在超时后再次使用 cookie 检查我的会话
- (快速地)使用步骤 3 中设置的新 cookie CouchDB 再次检查我的会话
请注意,第一个确认显示了{"name":"me"}
(表示我已经登录);第二个显示了{"name":null}
(表示我已经注销);但第三个又显示了{"name":"me"}
(由于使用了更新后的 cookie,我仍然登录着)。
$ curl -X POST -i localhost:5984/_session -d name=me -d password=secret
HTTP/1.1 200 OK
Set-Cookie: AuthSession=bWU6NEY5QjQ3QTA6Ao6zetUZUxkno37ULd2qdRRjmsc
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:00 GMT
Content-Type: text/plain
Content-Length: 35
Cache-Control: must-revalidate
{"ok":true,"name":"me","roles":[]}
$ sleep 20
$ curl -i localhost:5984/_session -H Cookie:AuthSession=bWU6NEY5QjQ3QTA6Ao6zetUZUxkno37ULd2qdRRjmsc
HTTP/1.1 200 OK
Set-Cookie: AuthSession=bWU6NEY5QjQ3QkM6WonDdsAdO8p7QUlLWCZQXVAfcvU
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:28 GMT
Content-Type: text/plain
Content-Length: 165
Cache-Control: must-revalidate
{"ok":true,"userCtx":{"name":"me","roles":[]},"info":{"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"],"authenticated":"cookie"}}
$ sleep 10
$ curl -i localhost:5984/_session -H Cookie:AuthSession=bWU6NEY5QjQ3QTA6Ao6zetUZUxkno37ULd2qdRRjmsc
HTTP/1.1 200 OK
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:43 GMT
Content-Type: text/plain
Content-Length: 140
Cache-Control: must-revalidate
{"ok":true,"userCtx":{"name":null,"roles":[]},"info":{"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"]}}
$ curl -i localhost:5984/_session -H Cookie:AuthSession=bWU6NEY5QjQ3QkM6WonDdsAdO8p7QUlLWCZQXVAfcvU
HTTP/1.1 200 OK
Set-Cookie: AuthSession=bWU6NEY5QjQ3RDA69pqrNVd-ClZ7_v4SkcghdZRRhCs
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:48 GMT
Content-Type: text/plain
Content-Length: 165
Cache-Control: must-revalidate
{"ok":true,"userCtx":{"name":"me","roles":[]},"info":{"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"],"authenticated":"cookie"}}
在CouchDB 1.2.0及更高版本中,您可以设置_config/couch_httpd_auth/allow_persistent_cookies
为"true"
,这会使事情变得更加容易看到。Cookie将具有明显的"Expires"标志,您可以看到它始终设置为当前时间加上超时值。