Zee*_*bir 12 java session google-analytics playframework playframework-2.0
我正在尝试在网络应用中加入谷歌分析图,以显示用户应用程序使用情况的统计数据.这是本地网址http://192.168.100.10:9000/我登录仪表板(网络应用程序)我有一个谷歌登录按钮.到目前为止,我在登录后维护用户的会话.
当用户点击登录按钮时.它触发回调方法.当第一次触发回调时,它会保持会话.我的意思session("user")是这里不是空的.
public Result callback() {
JsonNode jsonNode = Json.parse(session("user"));
UserDTO userDTO = Json.fromJson(jsonNode, UserDTO.class);
if (userDTO.getRole().getType().equals(RoleDTO.EnRoleType.ADMIN.toString()))
return redirect(com.softoven.ultron.controllers.routes.AccountCTRL.index());
if (request().queryString().get("code") != null && request().queryString().get("state") != null && request().queryString().get("state")[0].equals(session("state"))) { // Check if he/she is authorized
session().remove("state");
Analytics analytics = setAnalytics(userDTO, request());
session("analytics", Json.toJson(analytics).toString());
return redirect(com.softoven.ultron.controllers.routes.AccountCTRL.index());
} else { // Create Authorization URL
String url = helper.buildLoginUrl();
session("state", helper.getStateToken());
return redirect(url);
}
}
Run Code Online (Sandbox Code Playgroud)
这是用户点击登录按钮https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=784122128025-cvq0fn1e23f24dia4soavsd9v1ovesub.apps.googleusercontent.com&redirect_uri=http://localhost:9000/callback&response_type=code&scope=https://www.googleapis.com/auth/analytics.readonly%20https://www.googleapis.com/auth/analytics.manage.users%20https://www.googleapis.com/auth/analytics%20https://www.googleapis.com/auth/analytics.edit%20https://www.googleapis.com/auth/analytics.manage.users.readonly%20https://www.googleapis.com/auth/analytics.provision&state=google-35808300时的网址当用户点击
allow谷歌登录权限页面上的按钮时,控制权将返回callback()
但这次session("user")是空的.这不应该是null,因为我在用户登录时设置了会话.我不知道为什么会发生这种情况以及如何解决这个问题.
这是从谷歌权限页面重定向后的结束网址. HTTP://本地主机:9000 /回调状态=谷歌-35808300&代码= 4/G-FkJ3GGS01jbeXLHK0o95ks-K-drGK7bxgzvi3cELU#
这是本地网址http://192.168.100.10:9000/ ...
...&redirect_uri = http:// localhost:9000 / ...
这是从谷歌权限页面重定向后的结束URL http:// localhost:9000 / ...
起始网址与结束网址不同.这是不正确的.
通常,服务器端的HTTP会话与会话cookie绑定.Cookie又与特定主机名(IP或域)绑定.Web浏览器在向特定主机名发送cookie时非常严格.即使IP将DNS解析到正确的域,webbrowsers也可以拒绝发送在IP地址上创建的cookie以及对域名的请求.基本上,Web服务器不会检索最初创建的会话cookie,因此会创建一个新的会话cookie.
然后存在拒绝其主机名明确设置为"localhost"的cookie的web浏览器,例如Google Chrome:Chrome不会在破坏的https中为domain = localhost创建cookie.浏览器还可以选择拒绝其主机名明确设置为IP地址的cookie,因为这可能会在客户端使用动态IP时导致安全问题.
因此强烈建议使用真实的域名,example.com而不是IP地址或"localhost".如果不购买,只需编辑hosts文件就可以伪造一个.每行的格式如下所示,首先是IP地址,然后是所需的域空间分隔.
127.0.0.1 localhost example.com anotherexample.com
Run Code Online (Sandbox Code Playgroud)
然后在整个过程中始终如一地使用该域.开始http://example.com:9000/...,使用&redirect_uri=http://example.com:9000/...等
我不做Play Framework,但是如果你熟悉Servlet API,那么在阅读这个相关的问答后你可以更好地理解HTTP会话的工作:servlet如何工作?实例化,会话,共享变量和多线程.