Html保持用户状态的多种方法比较

比较

    众所周知,html的一个缺点是本身无法保持状态,客户连接服务器获取一个页面后,对服务器而言,此连接就已不存在了,下一页将重新连接。互联网上网站建立以后,一个普遍的需求是能够方便的管理上站用户的帐号信息,以及某些页面针对限定用户开放。如何跟踪用户,目前常用的有以下解决方案:
  * 在html的表单中利用隐藏输入域来传递信息,如:
  VALUE值即为状态信息,所以每次不同,不可能事先写好,只能通过CGI程序生成HTML页面:
  Print "
  这样,在下次表单重新提交时可以包含进去。
  使用隐藏输入确实是保持状态的一种简单办法,但必须由CGI程序生成页面,如大量使用,速度慢、不易于维护。
  * 向客户端发送cookie
  cookie是一种通过客户端的浏览器本身维持状态(甚至不同会话间)的方法。在浏览器访问站点时,调用set-cookie在客户端建立cookie,它将在以后每次连接到站点时返回给web服务器,从而携带用户ID。但cookie技术在使用中有以下缺陷,这甚至是致命的缺陷:
  1) cookie由于涉及到用户隐私的争论,所以缺乏广泛的支持,首先,不是所有的浏览器都支持cookie,另外,象IE这样的浏览器出于安全性的考虑,还可以设置屏蔽掉cookie。所以,使用cookie,至少要为客户提供其他选择。
  2) cookie缺乏安全保证,如果你的机器被别人使用访问web服务器,浏览器也会同样发送cookie。
   * 会话ID
  会话ID是每个客户在到达web站点时分配的唯一标识,多经由URL自身传递。在有些站点我们可能见到很长,看起来很奇怪的URL,常常是一串数字或字母。也正由于这种方案将URL弄得长且怪,笔者往往不倾向采用此方案,所以也不是本文的主旨。
  * 建立服务器端客户文件
  这种方案是在服务器端维护一个注册后的在线客户表,利用IP地址等信息来保持客户状态。但这种方案不能独立地解决我们的需求。很简单,如果几个客户使用同一个代理服务器(proxy)来访问web server,那么,在此方案下他们将被视为同一个用户。
  * htaccess协议
  .htaccess实际是系统访问控制文件(ACF)族中的一个。该协议目前为大多数UNIX环境的服务器支持,例如普遍采用的Apache服务器,较为通用(值得一提的是,与此相关的另一个文件为access.conf,还可实现基于主机域名/地址的访问控制)。其优点为:
  * 控制取决于服务器(当然目前NT除外),客户端极为兼容;
  * 针对目录保护,可方便灵活地定置;
  * 弹出窗口式密码校验,简单明了,符合惯例;
  * 客户注册后,CGI环境变量“REMOTE_USER”即为校验后的客户帐号,在整个保护区访问无需再注册,有效地保持了状态。
  .htaccess的具体实施步骤如下:
  1、规划目录,将要控制访问的所有文件集中至选定的目录里。
  2、在要存取控制目录下建立一个文件,文件名为“.htaccess”,别忘了有一个“.”(以“.”开始的文件名在unix下表示是隐含文件)。文件内容网上的很多地方都没有讲清楚,包括一些ISP提供的示例,也模糊不清。一个经验证的样本如下:
  AuthUserFile /path/.htpasswd
  AuthGroupFile /dev/null
  AuthName Information
  AuthType Basic
  require valid-user
  黑体字需根据实际情况替换。其中:
  AuthName: 用户认证名,将会在密码检测框中出现,但注意应为一个单词,否则要用引号引起来;
  AuthType: 使用的认证方式, 缺省为: Basic;
  AuthUserFile: 认证用户口令文件绝对路径,请根据实际替换/path/
  AuthGroupFile: 认证用户组别文件绝对路径
  : 标识访问特定目录访问控制段的开始/结束
require entity1 entity2: 要求认证的内容,entity1可以是user, group; entity2 为认证用户或组名。这一项最需要特殊说明,它可导致几种不同的配置,这正是常常没被说清之处:
  1) 不配置用户组时, 第二行的用户组别文件可设为:
  AuthGroupFile /dev/null
  要求认证的内容则为:require valid-user
  这时,管理用户只需配置 .htpasswd文件;
  也可做限定,如 : require user admin guest foresee
  这样,只有指定的用户才能登入。
  2) 如需配置用户组,首先指定组文件如下:
  AuthGroupFile /path/.htgroup
  要求认证的内容则应为:require group users
  而.htgroup文件的一个示例为:
  users: admin guest foresee
  以上两种搭配是不能混用的,象这样的.htaccess,你是无论如何注册不进去的:
  AuthUserFile /path/.htpasswd
  AuthGroupFile /dev/null
  AuthName Information
  AuthType Basic
  require group valid-user
  3、口令文件.htpasswd示例如下:
  shallwe:?W5h9v9KOwKI
  foresee:?vZTYLaCW8lI
  try:?LuRyE3jcujI
  大家一看就知道,它是按照DES算法加密过的。每条记录由帐号和密码组成。在通过下文提供的程序管理前,你可使用web服务器通常提供的htpasswd程序,当然,这需要一个主机的shell帐号,在UNIX命令行状态下,.htaccess文件指定的path中执行以下命令:
  # /var/www/bin/htpasswd -c .htpasswd username
  “-c”参数仅在第一次使用,它指明创建.htpasswd文件。username表示要增加的用户名,输入此命令后,系统会提示您输入密码两遍,这个用户就生效了。如果这个用户存在则提示您修改密码。
  htpasswd命令必须手工完成,不可能用于管理大量用户的增删。事实上,我们可以通过CGI编程自动管理,通过WWW页面在线添加、删除,限于篇幅,程序清单从略,需要者可与笔者联系。

时间: 2024-10-03 13:41:56

Html保持用户状态的多种方法比较的相关文章

mysql中为用户设置密码的多种方法_Mysql

当初次在机器上安装完Mysql时,你可以匿名进行访问数据库或者以不带口令的root身份进入数据库.另外如果你是一个管理员,你还要进行一些用户的建立及授权,这又涉及到设置密码的问题.下面我们就讨论一下如何设置密码: 首先我们应该知道Mysql数据库中的口令存储必须用password()函数加密它.因为在user表中是以加密形式存储口令,而不是作为纯文本.如果你没有加密,直接在数据库中执行以下语句: 复制代码 代码如下: use mysql insert into user (host,user,p

AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)_AngularJS

本文实例讲述了AngularJS实现用户登录状态判断的方法.分享给大家供大家参考,具体如下: 使用AngularJS的单页面应用时,由于是本地路由在控制页面跳转,但是有的时候我们需要判断用户是否登录来判断用户是否能进入界面. angularjs是mvc架构所以实现起来很容易也很灵活,我们只MainController里增加一个路由事件侦听并判断,这样就可以避免未登录用户直接输入路由地址来跳转到登录界面地址了 代码中的 $rootScope.user是登录后把用户信息放到了全局rootScope上

android SharedPreferences详解(android存储用户状态信息方法)

在andorid很多应用开发中都需要记录用户登录信息,使用静态变量手机关机用户状态清除,解决方法是使用SharedPreferences存储android用户信息. 一.SharedPreferences基础知识介绍 获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Activity对象的getPreferences()方法 两种方式的区别: 调用Context对象的getSharedPreferences(

将MS SQL SERVER数据库运行在普通用户(独立用户)状态下的设置方法终结篇

看了脚本之家网上的很多文章,整理了如下步骤,基本上可以说是终结解决方法了,这里给详细的整理下了, 希望可以帮助更新的朋友,让我们的服务器更加安全.脚本之家奉献. 首先是大家已经安装好了sqlserver 企业版. 第一步: Win2003 MSSQL以普通用户运行安全设置篇 这个里面主要是讲解了,普通用户的创建与设置,但需要注意的是,权限的设置 C盘需要以下权限: C:\administrators 全部权限 System 全部权限 IIS_WPG只读与运行的权限(只应用在当前文件夹) SQL2

ASP.NET保持用户状态的九种选择(下)

asp.net ASP.NET中的新状态容器 前面我们提到,ASP.NET为保存用户请求间的数据添加了几种新的途径.这些途径给了你如何保持状态信息更好的控制.这些技术的范围可以窄到只有一个请求那么小(Context对象),也可以宽到整个Web服务器和服务器上的所有应用程序(Machine.config文件).在多数情况下你有多种保存特定数据片的选择--使用每个方法描述的问题和答案来决定某个对象是否适合你的需要. Cache Cache对象用于单个用户.一组用户或所有的用户.这种数据为多个请求保持

ASP.NET保持用户状态的九种选择

摘要:ASP.NET为保持用户请求之间的数据提供了多种不同的途径.你可以使用Application对象.cookie.hiddenfields.Sessions或Cache对象,以及它们的大量的方法.决定什么时候使用它们有时很困难.本文将介绍了上述的技术,给出了什么时候使用它们的一些指导.尽管这些技术中有些在传统ASP中已经存在,但是有了.NET框架组件后该在什么时候使用它们发生了变化.为了在ASP.NET中保持数据,你需要调整从先前的ASP中处理状态中学习到的知识.随着Web时代的到来,在无状

用户状态维护

那什么是用户状态维护?作 者 : 青苹果工作室 本文点击次数:277 本文是编译稿件,原文出处:http://www.asptoday.com/articles/19990820.htm 如果你不多加小心,非常相似的情况会发生在web 应用程序上.所以,开发人员需要特别留意可 伸缩性和容错问题,在设计应用程序时应该能够适应未来的发展.维护用户状态是一个应用程序 可伸缩性和容错的组成部分,你在站点设计阶段所做的决定对于将来站点的成功至关重要. 不对某些类型的状态进行维护,一个web 应用程序是不能

C/C++多种方法获取文件大小

C/C++多种方法获取文件大小 #include <iostream> #include <io.h> #include <sys\stat.h> #include <afx.h> #define _AFXDLL using namespace std; void main() { // 此文件在工程打开状态下为不可访问 char* filepath = "..\\test.ncb"; // 方法一 struct _stat info;

程序员看淘宝,如何用Session保存用户状态

 网上购物已经成为现在生活不可缺少的一部分.我们上淘宝只是为了消费,今天换一个角度,用程序员的眼光看看淘宝. 如上图: 情况一:当打开一些和账户有关的网页,检测用户没有登录,系统自动会跳转到登录界面. 情况二:当检测到已经有用户登录,页面会自动跳转到目的页面. 问题:系统如何检测用户是否登录,如何保存用户的登录状态? 下面说说自己的理解:利用Session保存用户状态, 解决方案一:每个用户都有一个Session对象相对应,当用户想要跳转到任意跟账户有关的界面(已买到的宝贝页面),每个页面加载的