我发现我解决不了技术难题。我都觉得我不该做技术了。

郁闷死了。一个
登录有效期的问题。3,4天了,都没有搞定。
我都不适合做技术了。

[b]问题补充:[/b]
我在action里面,把用用户名,用户id取出来放到cookie里面。
然后写了一个filter过滤器,专门读cookie,我想把用户名和用户id取出来,把用户名和用户id封装到一个javabean对象里面,然后放到session里面,供其他的页面调用。
现在问题的关键是,根本读不出写入cookie时候的用户名和用户id。

都不知道为什么!!!
[b]问题补充:[/b]
我直接贴我写的代码吧。

1.EnpAction处理企业用户登录信息的。(在这里把用户信息写入cookie)
if("enplogin".equals(actionType)){ //企业登录
SJForm sjbean = (SJForm) form; //struts取用户userid,username
if(sjbean!=null){
enpform=enpdao.login(sjbean); //数据库检测是否有值
}
if(enpform.getUsername()!=null){ //如果有值
session.setAttribute("enpform", enpform); //先放session里
Cookie cookie1=new Cookie("username",enpform.getUsername());
Cookie cookie2 =new Cookie("enpid",String.valueOf(enpform.getId()));
int maxAge=0;
if(enpform.getCookies()!=null){
maxAge=Integer.parseInt(enpform.getCookies())*24*60*60;//秒
}
cookie1.setMaxAge(maxAge);
cookie2.setMaxAge(maxAge);

cookie1.setPath("/");
cookie2.setPath("/");
response.addCookie(cookie1);
response.addCookie(cookie2);
forwardstr="enpmanage";
2.过滤器类(我只贴出doFilter()方法代码。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session=request.getSession();
SJForm enpform=new SJForm();
Cookie temp=null;
Cookie[] cookies=request.getCookies();
int cookielen=0;
if(cookies!=null)
cookielen=cookies.length;

for(int i=0;i<cookielen;i++){
temp=cookies[i];
if("username".equals(temp.getName())){
enpform.setSjname(temp.getValue());
}
if("enpid".equals(temp.getName())){

enpform.setId(getPara.gotoInt(temp.getValue(),0));

}
session.setAttribute("enpform", enpform);
}

filterChain.doFilter(servletRequest, servletResponse);
}

可是我发现我读不出username,和enpid来。
大家觉得我的写法行吗

[b]问题补充:[/b]
To:fishbottle (高级程序员)
filter类不是总在action之前的吗?
To:litianyi520 (初级程序员)
在action里面写cookie的时候,就写了有效时间了。
登录的时候还有必要把登录时间记录下来比较吗
有效期过后,就取不出cookie了啊
[b]问题补充:[/b]
愁死我了。我是在过滤器中把值从cookie取出来。
然后放到session里,这样,我在任何一个页面,都能从session把用户名和id得到。
可以象javaeye似的提示,"欢迎你,mandyyuan"

我这样可行吗?

[b]问题补充:[/b]
象javaeye这样的,是怎么做到随时得到用户信息的啊。
[b]问题补充:[/b]
To:fishbottle (高级程序员)
第一次登录的时候,不是已经把在action中把cookie写入了吗
下次访问这个网站的时候,filter自然,就会取出cookie啊。

[b]问题补充:[/b]
我现在测试:在jsp里面写cookie,在jsp里面读cookie都是可以用getName(),getValue()把注入的东西取出来。

可我要实际在action里面写cookie,在jsp里面读cookie,就读不出来name,value

我用的struts框架,其他框架都没有

这是什么原因呢?

登录有效期?
登陆时记录访问时间放在数据库中待用
写个filer.
定个规则.
发现访问时间不合规则就踢出去

:lol: 万事开头难,不会就先百度,然后在提出自己的意见

不要忘记把用户名或cookie存下

使用cookie在客户端保存。
request.getCookies中可以获得cookies并保存这些信息

具体的代码,可以参考yhbbs的源代码
[url]http://down.chinaz.com/soft/20580.htm[/url]

[url]http://blog.163.com/hgj_online/blog/static/4767424320082263757581/[/url]
[url]http://mgc.ahau.edu.cn/article.asp?id=49[/url]

这两篇文章比较详细说明如何使用Cookies
希望对楼主有帮助!

仔细说说,大家帮你想办法

看源代码,暂时还看不出什么问题,

建议楼主
1.确认没有做额外的IE安全设置,禁止了Cookies的使用。
2.确认doFilter是在Action之前,还是在Action之后。最好是启用调试模式调试一下。
3.根据例子
[url]http://blog.163.com/hgj_online/blog/static/4767424320082263757581/[/url]
去掉一些不用的代码,将问题的范围进一步缩小。

我的建议是你直接用Spring Security或者它的前身Acegi,它们带有这个功能,SpringSecurity现在已经比较简单。权限自己开发是有一定风险的,可能的话用成熟的产品比较好。关于Acegi你可以参考Springside1.0,Spring Security可以参考Springside3.0,都提供了比较好的使用经验。

:) 不过就是一个登录流程而已,答题思路是这样的:
第一次来 记下cookie 里面存帐号和密码还有时间
下次来用fliter读取cookie里的帐号和密码,模拟登录一下,发现cookie里的时间和上次间隔3天了就remove Session和cookie
具体set 和get cookie 可以去百度 google 一下
fliter 不熟悉就看看这方面的技术,一步一步来 就OK了~

[quote]To:fishbottle (高级程序员)
filter类不是总在action之前的吗?[/quote]

既然你的doFilter在action之前,
而你的username和ip是在action中注入的。

那么filter得到的cookies值应该是空的啊?

[quote]第一次登录的时候,不是已经把在action中把cookie写入了吗
下次访问这个网站的时候,filter自然,就会取出cookie啊。 [/quote]

这倒也是,呵呵。
[quote]
看源代码,暂时还看不出什么问题,

建议楼主
1.确认没有做额外的IE安全设置,禁止了Cookies的使用。
2.确认doFilter是在Action之前,还是在Action之后。最好是启用调试模式调试一下。
3.根据例子
http://blog.163.com/hgj_online/blog/static/4767424320082263757581/
去掉一些不用的代码,将问题的范围进一步缩小。[/quote]

你先将获得的索引cookies打印一下看看是不是获得cookies的问题 是没有获取cookies还是别的

[code="java"]cookie1.setPath("/"); [/code]

这些有些不相关的代码去掉之后再调试一下呢?

既然你在jsp里面可以正确调用,再把jsp中正确的东西慢慢套到你的框架里去。
这样至少可以确定是cookie的使用问题,还是struts的问题。

下面是在网上面查到的。
[quote]请问Cookie的setPath(String uri),有什么用??

设置了路径就可以限制其它文件调用她,只能在文件目录下cookie才生效[/quote]

你用jsp方式没有问题,说明jsp那部分代码没有问题。

如果你现在肯定你filter的代码是正确的套用了jsp的代码,问题可能是:
cookie1.setPath("/"); //这段代码是设置cookie访问权限的
你的filter xml配置文件中的url映射是否正确,是否再cookie访问path中?

不懂,但是你可以看下你的java设置cookie时候发送的是怎样的tcp包,是不是set-cookie什么的,然后再看下document.cookie是什么,这些都是internet和浏览器,和java没关系