rt
据我所知,一些大型的门户网站的首页必然是静态的,或者用了页面缓存的(因为服务器扛不住)
但是这样的话怎么实现首页登录,和首页登录状态的转换呢?
你应该了解一下http的基本原理,实际上这些表单提交都是通过post形式提交并由服务器处理的。
在Asp.Net中通常是以Post形式回发到本页,所以你觉得只有动态页才能执行登录操作。
其实只要将静态页的数据post到一个地址,这地址里可以动态页,甚至也可以没有任何显示,只要处理请求就可以了。
至于登录状态的显示,只需要登录后写入Cookies,再由js读取并显示就行了。
——————————————————————————————
补充
Cookies与Session没有必要同步,因为都是针对一个用户的,也可以说它们压根就没有不同步的时候,你要存数据在Cookies或Session都可以,具体看你是要在客户端还是服务端调用了。
“有些站看到只要以前登录过,以后在上他的站就一直是登录状态,不知道这个是怎么做的,如果要回服务器验证必然要回传,难道第一次打开页面就回传?”
这完全可以由JS从Cookies中读取并显示的,只要设置较长时间的存活时间,就可以一直使用。
这里你可以理解为并未真正登录,因为你在首页只是浏览操作,不提交数据,所以对你身份没有特别要求,提交数据的时候服务器从Cookies中读取你的用户名及密码的MD5版本,进行一下验证,就能确定你的登录是否真正有效了。(有的网站的做法是提交数据的时候必须真正登录一下)
“如果出现用户在其他位置也登录了,是不是以后只要登录的地方只要上就一定能够登录??”
大多数网站都不需要对此加以限制,所以多点登录也是没有问题的。
并且如上所说,首页显示的登录状态并非是真的,完全可以等到真正提交服务器的时候再进行单点登录互斥判断。
“有时候一个大站有多个域名,他们是怎么保证一个位置登录了所有位置都登录了”
这些网站通常有一个专门的用户信息服务器(比如微软的就是明确显示了一个身份网站),用于做各个子站的中枢,在你登陆之后用户信息服务器可以在Cookies中写入一个流水号(通常是GUID类型),并在服务器保存该ID号对应的过期时间,其它服务器在需要验证身份的时候只要把Cookies里的流水号传给用户信息服务器,就能验证你的登录是否有效、是否过期。
“3有时候一个大站有多个域名,他们是怎么保证一个位置登录了所有位置都登录了。”
大网站通常都有n多台服务器,所以不用session的,当然session也可以存在另外的进程或者数据库中,但是一般也没这么做的,都是用cookie。 禁用了怎么办? 禁用一下试试?相信很多大网站的功能都没法用了。
不过在运维方面也可以设置,一个用户第一次访问到哪台服务器,保持在此次连接内,后面的操作都保持还是访问这台服务器。
建议了解下CMS