假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量.
现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么?它们对所有用户都是通用的,或者对于每个用户而言都是不同的.如果它们不同,那么服务器如何区分不同的用户?
还有一个类似的问题,如果有n用户访问特定的servlet,那么这个servlet只在第一个用户第一次访问它时实例化,或者是否为所有用户单独实例化?换句话说,实例变量会发生什么?
java multithreading servlets session-variables instance-variables
在大多数网站上,当用户即将提供登录系统的用户名和密码时,会出现一个"保持登录状态"的复选框.如果选中该复选框,它将使您在同一Web浏览器的所有会话中登录.如何在Java EE中实现相同的功能?
我正在使用基于FORM的容器管理身份验证和JSF登录页面.
<security-constraint>
<display-name>Student</display-name>
<web-resource-collection>
<web-resource-name>CentralFeed</web-resource-name>
<description/>
<url-pattern>/CentralFeed.jsf</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>STUDENT</role-name>
<role-name>ADMINISTRATOR</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbc-realm-scholar</realm-name>
<form-login-config>
<form-login-page>/index.jsf</form-login-page>
<form-error-page>/LoginError.jsf</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description>Admin who has ultimate power over everything</description>
<role-name>ADMINISTRATOR</role-name>
</security-role>
<security-role>
<description>Participants of the social networking Bridgeye.com</description>
<role-name>STUDENT</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud) 我在一些网站上看到用户登录了他们的帐户然后关闭了浏览器.
关闭并重新打开浏览器后,他们的帐户仍然已登录.
但有些网站,不能这样做.
我很困惑,它被认为是会话或cookie?
如果我希望我的网站像这样登录,我是否必须设置session.setMaxInactiveInterval()或cookie.setMaxAge()?
我想HttpSession通过JSESSIONID 获取Java .可能吗?如果有,怎么样?
我有一个登录页面,我想添加"记住我"功能; 这样,如果用户注销并再次打开页面,则会加载他的用户名和密码.为此,当用户登录(并"选中"记住我")时,我保存以下cookie:
FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie userCookie = new Cookie("vtusername", username);
userCookie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
.getResponse()).addCookie(userCookie);
Cookie passCokie = new Cookie("vtpassword", password);
passCokie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
.getResponse()).addCookie(passCokie);
Run Code Online (Sandbox Code Playgroud)
问题是后来(在同一个会话中)我读了cookie,我看到maxAge = -1; 即使我把它设置为3600 ......为什么?另一个问题:如果我使用userCookie.setSecure(true)设置cookie安全,那么我无法读取它(它消失了).
另一个问题:由于密码存储在cookie中,我应该如何对其进行加密?什么是最佳做法?
提前致谢
对于典型的最典型的面向互联网的网站,当您通过关闭选项卡登录并离开网站时(不登出),然后在连续重访时,您可能不需要重新指定您的凭据或登录,您直接登录.
如何在后端发生这一切?如何在我的JSF 2.1应用程序上启用此类机制?
在Tomcat7服务器上使用JSF 2.1
如果我在将来设置一个带有setMaxAge()的cookie,当我在后续请求中将cookie读回内存时,getMaxAge()会给我一个-1.我已经通过Chrome的设置和检查员检查了实际的Cookie,并且我可以验证到期日期确实设置为60天.
static public void setHttpCookie(HttpServletResponse response, String payload) {
Cookie c = new Cookie(COOKIE_NAME, payload);
c.setMaxAge(60*86400); // expire sixty days in the future
c.setPath("/"); // this cookie is good everywhere on the site
response.addCookie(c);
}
static public String checkForCookie(HttpServletRequest req) {
Cookie[] cookies = req.getCookies();
if ( cookies != null ) {
for ( Cookie c : cookies ) {
if ( COOKIE_NAME.equals(c.getName()) ) {
int maxAge = c.getMaxAge();
logger.debug("Read back cookie and it had maxAge of {}.", maxAge);
String …Run Code Online (Sandbox Code Playgroud) 我正在实现一个使用会话的Web应用程序.我正在使用GWT和app引擎作为我的客户端/服务器,但我不认为他们做的事情与我用PHP和apache等做的有什么不同.
当用户登录我的Web应用程序时,我正在使用HttpSession为他们启动会话.我得到这样的会话ID:
// From my login servlet:
getThreadLocalRequest().getSession(false).getId();
Run Code Online (Sandbox Code Playgroud)
我将sessionId返回给客户端,并将它们存储在cookie中.我正在使用的教程在两周内将此cookie设置为"过期":
Cookie.write("sid", theSessionId, 1000 * 60 * 60 * 24 * 14); // two weeks
Run Code Online (Sandbox Code Playgroud)
这里是我困惑的地方:如果cookie在两周内到期,那么我的用户将愉快地使用webapp,只有一天浏览到我的网站并显示登录屏幕.我有什么选择?我可以为此cookie设置没有过期时间吗?这样用户就必须明确注销,否则他们可以永远使用应用程序而无需重新登录?
或者有更好的方法吗?我不记得像Twitter这样的网站要求我重新登录.我似乎永久登录.他们只是没有设置过期?
webapp不保护任何类型的高度敏感数据,所以我不介意留下一个没有过期的cookie,但似乎必须有更好的方法?
这是我引用的教程:
http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ
谢谢
我正在使用Java servlets / jstl进行小型项目
我已经创建了带有会话的登录名,并且我希望浏览器即使在浏览器重新启动后仍保留该会话。
我写了这段代码:
HttpSession session=request.getSession();
session.setMaxInactiveInterval(604800);
session.setAttribute("loggedOnUser", true);
Run Code Online (Sandbox Code Playgroud)
我已将会话超时设置为一周。但是,每当我关闭浏览器并重新打开它时,我都需要再次登录。当我查看浏览器的cookie时,包含sessionId的cookie仍会在浏览器关闭时过期。我以为“ setMaxInactiveInterval”会将其更改为一个星期。有人知道问题出在哪里吗?
我需要用电子邮件地址创建cookie作为值 - 但是当我尝试 - 然后我有结果:
"someone@example.com"
但我希望:
someone@example.com
应该创建cookie而不使用双引号 - 因为其他应用程序以这种格式使用它.如何强制java不添加双引号?Java添加它们因为有特殊的字符"at".
我这样创建cookie:
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
Cookie cookie = new Cookie("login", "someone@example.com");
cookie.setMaxAge(2592000);
cookie.setDomain("domain.com");
cookie.setVersion(1);
response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在编写我的SPring MVC Web应用程序.
我将会话时间设置为10080分钟,等于1周.现在我想让用户每次打开浏览器时都会登录:
sessionService.setcurrentUser(myuser);
HttpSession session = request.getSession();
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(timeout);
response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)
我的cookie Max Age应该与会话超时相同吗?
cookie.setMaxAge(10080);
Run Code Online (Sandbox Code Playgroud)
这是好习惯吗?
我有一个相当新的网站(~3周龄)在Tomcat上运行,到目前为止访问量非常少.
对于上周我已经注意到了1000多个活动会话,并检查Tomcat的localhost_access*日志显示,绝大多数是从IP地址即将在此范围内:119.63.196*所有看起来属于百度日本.
这是一个小例子,来自他们登录头版的日志.119.63.196.107 - - [24/8/2011:07:02:46 0000] "GET /; JSESSIONID = 94085F76780ACFD96C8109A29446288D HTTP/1.1" 200 10311 119.63.196.44 - - [24/8/2011:07:03:21 0000] "GET /; JSESSIONID = 943133C77BB1756CF11592115BA81725 HTTP/1.1" 200 10333 119.63.196.39 - - [24/8/2011:07:03:56 0000] "GET /; JSESSIONID = 9B4384BDECF540C8628467F7AB4AB463 HTTP/1.1" 200 10311 119.63 .196.19 - - [24/8/2011:07:04:31 0000] "GET /; JSESSIONID = A0B555C3A18377D993B97D4491DD1012 HTTP/1.1" 200 10311 119.63.196.45 - - [24/8/2011:07:05:10 + 0000] "GET /; JSESSIONID = A3782FA61558BF11C4D5AC4F3DD1EC86 HTTP/1.1" 200 10311 119.63.196.23 - - [24/8/2011:07:05:53 0000] "GET /; JSESSIONID = A3AF84EF13F21492EB47FAB001A1C2E5 HTTP/1.1" …
我有一个login screen,我通过检查数据库中的凭据来验证用户.但我该如何实施Remember me check box?就像在gmail中一样remember me(stay signed in).我使用sign.jsp,并Auth servlet (doPost)和oracle 10g ee认证.
servlets ×10
java ×9
cookies ×4
session ×4
http ×2
jsf ×2
tomcat ×2
gwt ×1
httpsession ×1
java-ee ×1
jsp ×1
login ×1
primefaces ×1
quotes ×1
remember-me ×1
spring-mvc ×1