一个状态保持的小问题

iiihavedone 2018-11-09 03:37:07
在静态页怎么做到状态保持?用Cache或者cookie的话多个用户登录进来了,怎么确定当前是哪个用户?

由于使用的HttpModule 从服务器上读取静态页模板,算是纯静态页了,无法使用Session。即使我在AcquireRequestState事件中拿到了Session,在静态页也用不了。
交互的话就是通过ajax向服务端发请求,替换掉模板的字符串。
我尝试将用户信息存在Cache或者Session中,但是另一个用户访问网站的时候,因为Cache是共享的原因,就把之前没有退出登录的用户的信息读了出来
我为每个用户都加标识的话,登录进来后进行操作时要验证登录,又不知道怎么获取那个标识
脑子有些转不过来了,求助
...全文
50 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
不用揣摩你说的那么多问题,仅仅回答最根本一的一点:

“静态页”就是传统的 c/s 程序,或者用15 年前的说法叫做“富客户端web程序”,它并不需要 asp.net 端写什么交互回发的网页 UI 生成代码。一切动态内容都是 js 动态产生的。

所以前端程序员是什么平台的 web 应用程序都能开发(不管是手机、平板,不管是 windows、mac还是 linux),它单独开发一个 html/js/css 网站即可。即使放到 windows 桌面某个文件夹里,也是一个独立的 html 前端应用程序。使用 PhoneGap Build 打包一下就同时打包生成各种手机安装报。随便找个 winform 通用程序壳放在一起就是一个 windows 桌面应用程序。

总之是纯粹前端的独立的编程设计概念。不要纠结什么 asp.net 代码。不要纠结什么 asp.net 代码。不要纠结什么 asp.net 代码。

好的谢谢您
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
以传统的 asp.net 程序而言,是可以在 cookie、以及(同样是cookie中的)SessionID 进而在 asp.net 端的 Session 集合中保存用户登录信息的。但是传统的 asp.net 程序要把所谓用户信息保存到 Session 集合,那么必定要在前面的登录页中进行回发等等操作。

那么这怎么可能是你说的“静态页”呢?


每做一个操作,我都会向服务器发送一个请求,验证当前的状态是否是登录
跳转哪个页面,我是通过URL的值决定取哪个模板,这个模板全是html,存放在指定的文件夹中


//拿到模板
var html = string.Empty;
var filename = COMMONFILE + "\\" + file;
if (File.Exists(filename))
{
using (var sr = new StreamReader(filename, Encoding.UTF8))
{
html = sr.ReadToEnd();
}
}

return html;



//替换占位符生成静态页
html = html.Replace("$NEWSTYPE$", CommonHTML.Get_MNEWSFLASH(CommonClass.MDOMAIN)); //移动端 滚动新闻推送


大概就是这样子
  • 打赏
  • 举报
回复
不用揣摩你说的那么多问题,仅仅回答最根本一的一点: “静态页”就是传统的 c/s 程序,或者用15 年前的说法叫做“富客户端web程序”,它并不需要 asp.net 端写什么交互回发的网页 UI 生成代码。一切动态内容都是 js 动态产生的。 所以前端程序员是什么平台的 web 应用程序都能开发(不管是手机、平板,不管是 windows、mac还是 linux),它单独开发一个 html/js/css 网站即可。即使放到 windows 桌面某个文件夹里,也是一个独立的 html 前端应用程序。使用 PhoneGap Build 打包一下就同时打包生成各种手机安装报。随便找个 winform 通用程序壳放在一起就是一个 windows 桌面应用程序。 总之是纯粹前端的独立的编程设计概念。不要纠结什么 asp.net 代码。不要纠结什么 asp.net 代码。不要纠结什么 asp.net 代码。
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
在你的 asp.net 端,就是提供通用的远程服务功能,根本不管远程客户端是什么机制的 UI 程序。

每一个“静态页”就相当于一个独立的前端应用程序。第一次下载 html 的之后,静态页应用程序可能被用户使用几个小时,根本不刷新。还纠结什么 “Session 里保存用户信息”这类概念啊?


我知道您说的意思了,我也没有表达清楚,我想要保持登录的状态是因为进入每个页面都会验证是否登录,拿不到登录状态进去的话页面就是未登录看到的页面,于是我就把登录状态写在了Cache里
  • 打赏
  • 举报
回复
以传统的 asp.net 程序而言,是可以在 cookie、以及(同样是cookie中的)SessionID 进而在 asp.net 端的 Session 集合中保存用户登录信息的。但是传统的 asp.net 程序要把所谓用户信息保存到 Session 集合,那么必定要在前面的登录页中进行回发等等操作。 那么这怎么可能是你说的“静态页”呢?
  • 打赏
  • 举报
回复
引用 4 楼 x15037308498 的回复:
[quote=引用 2 楼 stherix 的回复:] web cache是存在客户端的啊,怎么会共享呢
应该是我理解上有问题吧,是这样的,我拿A机器访问网站,登录,我换了台机器B访问我的网站,但是直接就是A机器登录过的用户已经登录,难道是局域网的原因才会导致Cache公用吗[/quote] 我不懂你说的“局域网的原因才会导致Cache公用”是什么意思。如果浏览器有缓存,那么是浏览器页面缓存,也跟什么 asp.net 端后台代码无关。所以你说的具体是什么意思很难揣摩,因为没有什么技术知识解释你猜测的这个概念到底是什么意思。 至于你说页面B显示登录了,那么你应该仔细研究源代码,看看不同页面客户端重定向之间是以什么样的业务逻辑协议来识别用户身份的。这个实现千差万别,不可能乱猜。
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
[quote=引用 0 楼 x15037308498 的回复:]
交互的话就是通过ajax向服务端发请求,替换掉模板的字符串。
我尝试将用户信息存在Cache或者Session中,但是另一个用户访问网站的时候,因为Cache是共享的原因,就把之前没有退出登录的用户的信息读了出来
我为每个用户都加标识的话,登录进来后进行操作时要验证登录,又不知道怎么获取那个标识


你的这个根本不是“静态页”概念,还是纠结于 asp.net 服务器端页面概念。你编写过桌面 winform 或者 wpf 程序码?或者实实在在的多用户控制台程序也成!一点都没有接触过?假设你编写一个 winform 程序,那么程序界面处理功能在客户端,你还纠结什么服务器端 Session 来给 winform 取什么用户登录之类的机制吗?

“静态页”可以说就是一个纯粹的 c/s 程序,是富客户端交互程序终于回归了编程的本质。根本不用什么服务器端 UI 编程,不要再在 web 服务器端乱写什么页面编程代码了![/quote]

是我的理解问题,但是这个项目是同事拿给我的,以前接触过伪静态,通过重写URL的方法进行SEO,同样是用HTTPModule,只不过这个很直接,就没有aspx页面,而是直接读取写好的html,通过请求ashx的返回值,替换里面的字符串,于是就纠结到html上状态保持的问题了
  • 打赏
  • 举报
回复
在你的 asp.net 端,就是提供通用的远程服务功能,根本不管远程客户端是什么机制的 UI 程序。 每一个“静态页”就相当于一个独立的前端应用程序。第一次下载 html 的之后,静态页应用程序可能被用户使用几个小时,根本不刷新。还纠结什么 “Session 里保存用户信息”这类概念啊?
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
引用 2 楼 stherix 的回复:
web cache是存在客户端的啊,怎么会共享呢


应该是我理解上有问题吧,是这样的,我拿A机器访问网站,登录,我换了台机器B访问我的网站,但是直接就是A机器登录过的用户已经登录,难道是局域网的原因才会导致Cache公用吗
  • 打赏
  • 举报
回复
引用 0 楼 x15037308498 的回复:
交互的话就是通过ajax向服务端发请求,替换掉模板的字符串。 我尝试将用户信息存在Cache或者Session中,但是另一个用户访问网站的时候,因为Cache是共享的原因,就把之前没有退出登录的用户的信息读了出来 我为每个用户都加标识的话,登录进来后进行操作时要验证登录,又不知道怎么获取那个标识
你的这个根本不是“静态页”概念,还是纠结于 asp.net 服务器端页面概念。你编写过桌面 winform 或者 wpf 程序码?或者实实在在的多用户控制台程序也成!一点都没有接触过?假设你编写一个 winform 程序,那么程序界面处理功能在客户端,你还纠结什么服务器端 Session 来给 winform 取什么用户登录之类的机制吗? “静态页”可以说就是一个纯粹的 c/s 程序,是富客户端交互程序终于回归了编程的本质。根本不用什么服务器端 UI 编程,不要再在 web 服务器端乱写什么页面编程代码了!
stherix 2018-11-09
  • 打赏
  • 举报
回复
web cache是存在客户端的啊,怎么会共享呢
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
难道只能使用iframe或者进一个页面都要请求一次替换成登录后的页面吗

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧