竟然有这样的问题发生我的身上,搞一天了还没调试出来。我写一个登录拦截器来拦截所以有action在没登录情况下访问action(除登录action外)都跳到登录页。诡异的问题在:登录拦截里取session值时,IE6、IE7、TT取到的值是null;IE5、火狐、谷歌、Opera、Safari都可以取到session值!所以我写的拦截器在IE6、IE7、TT浏览器都跳到登录页,其他浏览器都正常?我在网上找了很久都没有这方面的资料,那应该证明你们都没有遇到过这样的问题。这次真的完蛋了!第一次遇到这样的问题!我把代码贴出来!我只知道两种取session值方法(在拦截器类中)
方法1:ActionContext ctx = invocation.getInvocationContext();
  Map session = ctx.getSession();
  String adminName = (String) session.get("curAdminName");方法2:  String adminName = (String) ServletActionContext.getRequest().getSession().getAttribute("curAdminName");
登录拦截器package com.tfl.shop_manage.common;import java.util.Map;import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.tfl.shop_manage.action.AdminLoginAction;
public class AdminActionInterceptor extends AbstractInterceptor { private Logger logger = Logger.getLogger("AdminActionInterceptor");

@Override
public String intercept(ActionInvocation invocation) throws Exception { ActionContext ctx = invocation.getInvocationContext();

Map session = ctx.getSession();

String adminName = (String) session.get("curAdminName");

// String adminName = (String) ServletActionContext.getRequest().getSession().getAttribute("curAdminName1");

System.out.println("loginName="+adminName);
System.out.println("LoginAction.calss="+AdminLoginAction.class);
System.out.println("invocation.getAction().getClass="+invocation.getAction().getClass());

if(null != adminName){

logger.info("if");

return invocation.invoke();

}else{

//登录页   session中没值
if(AdminLoginAction.class==invocation.getAction().getClass()){

return invocation.invoke();
}
logger.info("else");
logger.info("已拦截器");

return "login";            //在struts.xml里定义一个 <global-results>
}
}}struts.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"><struts> <!-- 拦截没登录的action -->
   <package name="baseAction"  extends="struts-default">
    <interceptors>
         <interceptor name="adminActionInter" class="com.tfl.shop_manage.common.AdminActionInterceptor"></interceptor>
        
         <interceptor-stack name="adminActionInterStack">
         <interceptor-ref name="adminActionInter"></interceptor-ref>
         <interceptor-ref name="defaultStack"></interceptor-ref>
         </interceptor-stack>
        
        </interceptors>
        
        <default-interceptor-ref name="adminActionInterStack"></default-interceptor-ref>
        
        <global-results>
         <result name="login">/res/login.jsp</result>
        </global-results>
   </package>
<!-- 管理员登录 tf_admin -->
<package name="login" extends="baseAction" namespace="/">
<action name="login_*" class="adminLoginAction" method="{1}">
<result name="loginSuccess">/index.jsp</result>
<result name="loginFail">/res/login.jsp</result>
<result name="exitSuccess">/res/login.jsp</result>
</action>
</package>

<!-- 文章管理  tf_article -->
<package name="artManage" extends="baseAction" namespace="/">
<action name="artManage_*" class="articleManageAction" method="{1}">
<result name="artListSuccess">/res/article/articleList.jsp</result>
<result name="artSearchSuccess">/res/article/articleSearch.jsp</result>
<result name="artViewSuccess">/res/article/articleView.jsp</result>
<result name="showArtAddSuccess">/res/article/articleAdd.jsp</result>
<result name="artAddSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artUpdateView">/res/article/articleUpdateView.jsp</result>
<result name="artUpdateSuccess">/res/article/artAddSuccess.jsp</result>
<result name="artDeleteSuccess">/res/article/artDelSuccess.jsp</result>
</action>
</package>
</struts>

解决方案 »

  1.   

    我的web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

      <welcome-file-list>
        <welcome-file>/res/login.jsp</welcome-file>
      </welcome-file-list><!-- 500 错误 跳到登录页 -->  
     <!--
     <error-page>   
      <error-code>500</error-code>   
      <location>/res/login.jsp</location>   
     </error-page>
    --> <!-- 400 错误 跳到登录页 -->  
    <!-- 
    <error-page>   
       <error-code>404</error-code>   
       <location>/res/login.jsp</location>   
    </error-page>
      -->
      
    <!-- spring配置 -->  
     <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    <!-- default: /WEB-INF/applicationContext.xml -->
    </listener>  <context-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>
    <!-- 中文过滤器 -->
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter><filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- session配置 session在jsp用完后再关闭-->
    <filter>
    <filter-name>openSessionInView</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sf</param-value>
    </init-param>
    </filter><filter-mapping>
    <filter-name>openSessionInView</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping> <!-- 管理员过滤器jsp页面 -->
    <!--<filter>
    <filter-name>adminFilter</filter-name>
    <filter-class>com.tfl.shop_manage.common.AdminFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>adminFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.htm</url-pattern>
    </filter-mapping>
    --><!--url重写 -->
    <filter>
       <filter-name>UrlRewriteFilter</filter-name>
       <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
       <filter-name>UrlRewriteFilter</filter-name>
       <url-pattern>/*</url-pattern>
       
    </filter-mapping>

    <!-- struts2配置  -->
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    <!--<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    -->
    </filter><filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST </dispatcher>  
    <dispatcher>FORWARD </dispatcher>  
    <dispatcher>INCLUDE </dispatcher>
    </filter-mapping> 
    </web-app>
      

  2.   

    你把这个过滤器openSessionInView去掉试试。
      

  3.   

    头次听说 session还会跟浏览器有关系  关注中~
      

  4.   

    是不是你的js 上写的有问题?  一般IE6
    兼容问题都会出在JS身上,  你可以跟踪下
      

  5.   

    这个地方跟JS有关么?携带sessionId试验看看呢? TT的内核是IE7 难道跟请求报文的不同有关?
      

  6.   

    <package name="artManage" extends="baseAction" namespace="/">
            <action name="artManage_*" class="articleManageAction" method="{1}">
                <result name="artListSuccess">/res/article/articleList.jsp</result>
                <result name="artSearchSuccess">/res/article/articleSearch.jsp</result>
                <result name="artViewSuccess">/res/article/articleView.jsp</result>
                <result name="showArtAddSuccess">/res/article/articleAdd.jsp</result>
                <result name="artAddSuccess">/res/article/artAddSuccess.jsp</result>
                <result name="artUpdateView">/res/article/articleUpdateView.jsp</result>
                <result name="artUpdateSuccess">/res/article/artAddSuccess.jsp</result>
                <result name="artDeleteSuccess">/res/article/artDelSuccess.jsp</result>
            </action>
        </package>在红色的地方不要用匹配符,还是每个方法都配置一下,代码没什么问题,我也没遇到过,你改一下试试看。
      

  7.   

    lz看这里.
    http://www.java3z.com/cwbwebhome/article/article2/2933.html
      

  8.   

    IE6、IE7、TT取到的值是null
    你看看你这几个浏览器。。是不是把COOKIES给禁用了
      

  9.   

    去掉openSessionInView试过了,还是有问题,谢谢!