`
Mybeautiful
  • 浏览: 298424 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Tapesty 5 中 Cookie的使用

阅读更多

     昨天学CSDN搞了跟两周内不用登陆,通过Cookie实现,实际就是如下几步:

         1.登陆时产生Cookie, 设置过期时间为两周后。Tapestry对应的代码如下:

 

	@Inject
	private Request request;

	@Inject
	private RequestGlobals requestGlobals;

       Object onSubmitFromloginForm() {
               saveLoginInfo();
               user=?  //get user from database
        }	

        private void saveLoginInfo() {
		Cookie cookie = new Cookie("user", "true");
		String contextPath = request.getContextPath();
		cookie
				.setPath(contextPath != null && contextPath.length() > 0 ? contextPath
						: "/");
		cookie.setMaxAge(60*60*24*7*2);
		cookie.setSecure(request.isSecure());
		requestGlobals.getHTTPServletResponse().addCookie(cookie);
	}

         当然重点是 saveLoginInfo方法。 顺便提下, Tapestry的注入功能确实强大,方便。

 

       2. 当跳转到Login页面是,检查Cookie是否过期,如果没有,则跳过登陆。

 

 

	@Inject
	private Cookies cookies;

	Object onActivate() {
		String userId=cookies.readCookieValue("user");
		if(userId==null){
			return null;   //If no login Cookie, keep on Login page
		}
		
		if(user==null){
			user = ?   //get user from database.
			if (user != null l) {
				return null;
			}
		}
		return Main.class;  // or else, go to main page.
	}

 

         其实,这两步就已经完成了两周内不用登陆的要求了。

 

 

    但是,我的网站还有个 注销功能,就是删除cookie。 代码如下

 

		cookies.removeCookieValue("user")

 

 

    现在郁闷的事情发生了了,无论我如何点 Log out, 总是注销不了,似乎这个user Cookie总是存在,没有办法remove. 结果我试了一招,清除浏览器的 历史记录 (其实就是清除Cookie), 结果我的Log out生效了!

 

    分析原因如下: 这个user Cookie的名字太平常了,可能有其他某个同域的网站也有这个Cookie, 只要那个网页不关掉,这个Cookie就一直生效。 当然这只是猜测而已。没有证明,问题也不能重现,故可以猜测不对。

 

    无论如何,我决定用一个不太常用的cookie名字....也请有类似经验的兄弟们,说说你们的意见。

 

 

 

 

-----------------------------------------------------

-----------------------------------------------------

      经进一步研究发现,不是Cookie同名的问题。而是Tapesty5的Bug, 确实是因为Cookie没有删除。 经过我的试验,这个

cookies.removeCookieValue("user");

 仅能在网站是根目录的情况才生效, 如 http://localhost:8080/Main , 如果变成 http://localhost:8080/MySystem/Main 就不生效了。这也是为什么我用jetty开发调试时没有问题,但是部署到服务器就有问题的原因。在Tapestry的Wiky上找到了方法。使用如下这段代码删除Cookie.

 

	private void delLoginInfo() {
		// cookies.removeCookieValue(“user”);
		Cookie cookie = new Cookie(
				Start.loginCookie,
				null);
		String contextPath = request.getContextPath();
		cookie
				.setPath(contextPath != null && contextPath.length() > 0 ? contextPath
						: "/");
		cookie.setMaxAge(0);
		cookie.setSecure(request.isSecure());
		requestGlobals.getHTTPServletResponse().addCookie(cookie);
	}

 

0
0
分享到:
评论

相关推荐

    cookie使用,localStorage使用

    Cookie和localStorage是两种常见的浏览器存储机制,用于在用户浏览器中保存数据。接下来,我们将详细探讨这两种技术的使用方法及其特点。 首先,让我们来了解一下Cookie。Cookie是由服务器发送到用户的浏览器并由...

    silverlight中cookie的使用

    在Silverlight中使用Cookie,首先要导入System.Windows.Browser命名空间,该命名空间包含HtmlPage类,这个类提供了与浏览器进行交互的方法。例如,你可以使用HtmlPage.Document.GetCookie()方法获取当前页面的Cookie...

    servlet中的Cookie的使用

    本示例探讨了如何在Servlet中使用Cookie技术来实现用户登录信息的持久化存储,以便用户在再次访问网站时无需重复登录。下面将详细解释相关知识点。 1. **Servlet**:Servlet是Java平台上的一个标准接口,它允许Java...

    TP5 Session和Cookie

    在ThinkPHP5中,使用Cookie同样简单: ```php // 设置Cookie Cookie::set('username', '张三', 3600); // 值为'张三',有效期为3600秒 // 获取Cookie $username = Cookie::get('username'); // 删除Cookie Cookie::...

    C#操作cookie,解密加密cookie

    为了能够存储或在网络上传输`CookieContainer`,代码中使用了`ObjectToBytes`和`BytesToObject`两个方法来实现序列化与反序列化。`ObjectToBytes`方法将`CookieContainer`转换为字节数组,而`BytesToObject`方法则将...

    asp.net中的cookie使用例

    本文将深入探讨如何在ASP.NET中使用Cookie来实现题目所述的功能。 首先,我们需要理解Cookie的工作原理。Cookie是由服务器发送到浏览器的一小段文本信息,浏览器在后续的请求中会自动将其回传给服务器。它们通常...

    java中cookie的使用教程

    本文将深入讲解Java中Cookie的使用方法,包括创建、设置、读取和删除Cookie,以及其在Web应用程序中的作用。 1. **Cookie的基本概念** - **定义**:Cookie是服务器发送到用户浏览器并存储在本地的一小块数据,当...

    cookie使用工具类

    在IT行业中,Cookie是Web应用程序中广泛使用的机制,用于存储客户端状态信息。Cookie使用工具类是程序员为了方便地管理、创建和操作Cookie而编写的辅助类。这些工具类通常封装了与Cookie相关的复杂操作,使得代码...

    jscript中使用cookie

    **JavaScript Cookie 使用详解** 在Web开发中,JavaScript的全局变量在不同页面间通常是无法共享的,但是有一种机制——Cookie,可以实现跨页面的全局数据存储。Cookie是由浏览器提供的功能,它允许JavaScript通过`...

    在C#中可以使用CookieContainer 对象来保存登录后的Cookie信息

    ### 在C#中使用CookieContainer对象保存登录后的Cookie信息 #### 概述 在Web开发过程中,为了保持用户的会话状态或存储用户的一些特定信息,通常会使用到Cookie技术。Cookie是一种小型的数据文件,用于存储客户端...

    练习2:使用Cookie简化用户登录.zip

    在Web开发中,用户登录是常见的功能之一,而使用Cookie技术可以有效地简化这一过程,提供更流畅的用户体验。本练习将探讨如何利用Cookie来管理用户的登录状态,从而避免频繁地发送登录请求。以下是对这个主题的详细...

    微信小程序cookie维护插件 实现自动设置获取cookie功能

    本文将详细讲解如何使用微信小程序中的cookie维护插件,实现自动设置和获取Cookie的功能,并特别关注增加的Cookie超时处理机制。 首先,理解Cookie的基本概念。Cookie是由服务器端生成,发送到客户端(浏览器)的一...

    jquery.cookie使用方法(中文详细版)

    要在项目中使用 jQuery.cookie,首先确保已经包含了 jQuery 库,然后引入 jQuery.cookie 的 JavaScript 文件。例如: ```html <!DOCTYPE html> <title>jQuery.cookie 示例 ...

    原生登录cookie保持提供webview使用

    5. **监听WebView的加载事件**:为了处理可能的重定向或动态添加的cookie,你可以监听`WebViewClient`的`shouldInterceptRequest`方法,以便在每次请求前设置或更新cookie。 6. **处理隐私政策和权限**:由于涉及...

    android cookie获取和设置,webView的cookie的同步

    在 Android 中使用 WebView 显示网页时,为了使 WebView 能够正确地处理 Cookie,需要对其进行配置以确保与系统 Cookie 的同步。这可以通过创建 `CookieSyncManager` 实例并在适当的时候启动和停止同步来实现。 ###...

    asp.net中httpcookie 的使用和简单计数器

    5. **读取Cookie**:通过`Request.Cookies`集合访问已存在的Cookie,使用Cookie的名称作为键获取相应的Cookie对象。 ```csharp if (Request.Cookies["Info"] != null) { string temp = Convert.ToString...

    asp.net中Cookie的用法

    下面将详细介绍如何在ASP.NET中使用Cookie。 #### 创建Cookie 创建一个Cookie非常简单,只需要使用`HttpCookie`类即可。例如,创建一个名为`aspcn`的Cookie,并设置其值为“水小”。 ```csharp HttpCookie cookie...

    mvc中cookie安全

    **标题解析:**“mvc中cookie安全”这个标题聚焦于在使用Model-View-Controller (MVC)架构的Web应用程序中处理Cookie的安全性问题。在Web开发中,Cookie常用于存储用户状态信息,如会话ID,但如果不妥善管理,可能会...

    浏览器中使用JS操作Cookie详解

    并且在Cookie详解这篇文章中,介绍了如何在服务器端和使用JavaScript创建Cookie,并设置属性。 ​我们知道,Cookie是存储在客户端的,并且现在前后端分离慢慢变得流行起来,因此如何在浏览器上可以使用方便快捷的...

    使用Cookie记录用户名和密码

    在编程实现上,对于Java开发者,可以使用HttpServletResponse的addCookie()方法来设置Cookie,而对于前端JavaScript,可以使用document.cookie接口来操作Cookie。对于Python的Flask或Django框架,也有相应的库函数...

Global site tag (gtag.js) - Google Analytics