我在这里有点困惑,构建一个包含标签页的Web应用程序。在选项卡表类中,我使用数据成员 - 静态字符串变量来存储用户选择的选项卡。我这样做是为了当用户返回标签页时我可以显示用户最后选择的标签。我得到了理想的结果。但是,如果我注销并登录(在浏览器上删除缓存后),选项卡表仍然会选择用户上次选择的选项卡,而不是选择默认选项卡。标签页由另一个组件初始化。我不明白的是,班级定义不是垃圾收集的吗?为什么选择旧数据?如何解决这个问题?
答案 0 :(得分:2)
您似乎假设将变量static设置为某种程度上对应于将其隔离到用户会话。它没有。
如果您想要任何类型的会话处理,您必须实际拥有会话。 (您需要考虑服务器重启,多个服务器等会发生什么。)
当你有一个静态变量时,该类加载器中该类的一个变量。它与用户没有任何。 所有用户如果遇到同一个服务器,都会看到相同的变量。
您还没有告诉我们您用于构建Web应用程序的技术,但基本上您应该查看在服务器端用户会话方面为您提供的内容 - 或使用隐藏字段传播信息或类似的东西,所以服务器根本不需要跟踪它。
答案 1 :(得分:1)
静态成员是按类而不是按对象存储的,因此静态成员的值在所有类实例(对象)中是相同的,并且在实例超出范围时不会“重置”。以这种方式使用静态成员是一个坏主意,因为应用程序的所有用户都将看到相同的值,如果其中一个用户更改它,则每个人都可以看到更改的值(即,如果用户1更改了选项卡) ,标签也会为所有其他用户而改变。)
答案 2 :(得分:0)
仅仅因为您清除了浏览器缓存,它不会影响存储静态变量的服务器上的对象。如果用户注销(或登录,您的选择)
,则需要明确重新设置它答案 3 :(得分:0)
如果值不断变化,那就不是静态的。我认为你应该考虑使用不同的机制来存储这些变量。