【发布时间】:2014-04-20 23:36:12
【问题描述】:
我阅读了有关请求拦截器的信息,但不知道如何真正使用它们来获取 cookie...我正在从 nodejs 发送 cookie...
res.cookie('userid', user._id, { maxAge: 86400000, signed: true, path: '/' });
在我的 android 客户端中 - 我已经为我的 RestApiManager 设置了这个
public class RestApiManager {
private static final String API_URL = "ip: port";
private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
//Call interface
public interface AsynchronousApi {
//Login User
@FormUrlEncoded
@POST("/login")
public void loginUser(
@Field("loginName") String loginName,
@Field("password") String password,
Callback<UserResponse> callback);
//Profile Picture
@Multipart
@POST("/profilePicture")
public void uploadProfilePicture(
@Part("photo") TypedFile photo,
@Part("userId") String userId,
Callback<UserResponse> callback); //success thumbnail to picasso
}
//create adapter
private static final AsynchronousApi ASYNCHRONOUS_API = REST_ADAPTER.create(AsynchronousApi.class);
//call service to initiate
public static AsynchronousApi getAsyncApi() {
return ASYNCHRONOUS_API;
}
}
单独的 cookie 类:
public class ApiCookie implements RequestInterceptor{
// cookie use
private String sessionId;
public ApiCookie() {
}
//COOKIE BELOW
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}
public void clearSessionId() {
sessionId = null;
}
@Override
public void intercept(RequestFacade requestFacade) {
setSessionId();
}
}
想弄清楚如何获取 cookie 并能够在未来的请求中发送它,所以我不需要包含 userId 字段?
【问题讨论】:
-
您是否尝试过启用cookies?只需在某处致电
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); -
如果我这样做,那么它会在我发出的每个请求上自动发送 cookie 吗?
-
是的,至少如果您使用
okhttp作为底层 http-transport 实现,它会。这就是我在应用程序中处理 cookie 的方式。 -
在登录页面上我应该在哪里准确地调用它 - 就足够了吗?
-
我从自定义
Application类的onCreate方法调用它