aspnet的原理,aspnet教程

http://www.itjxue.com  2023-01-06 13:06  来源:未知  点击次数: 

博达远创对cookie技术的原理怎么看?

就session的实现而言,好像是这样的:

(1)当有Session启动时,服务器生成一个唯一值,称为SessionID(好像是通过取进程ID的方式取得的)。

(2)然后,服务器开辟一块内存,对应于该SessionID。

(3)服务器再将该SessionID写入浏览器的cookie(一些在网页的源代码中有所体现)。

(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放该内存块。

(5)当浏览器连入IIS(服务器)时并请求的ASP(脚本语言)内用到Session时,IIS(服务器)就读浏览器Cookie中的SessionID。

(6)然后,服务检查该SessionID所对应的内存是否有效。

(7)如果有效,就读出内存中的值。

(8)如果无效,就建立新的Session。

注意:

(1)在大浏览量的网站,Session并不保险,我们过去的网站就经常碰到存在Session中得值不正确(可能出现重复的Session ID)。

(2)Session ID不能从硬盘上的Cookie文件获得,如果想在客户端获知自己的Session ID,只能通过Javascrīpt来读取。

Cookie和会话状态

做BS开发,这两个概念必不可少,先来个大概了解,没有实际应用很难深入,深入看参考地址!

什么是 Cookie?

Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。 Cookie 的基本工作原理如果用户再次访问站点上的页面,当该用户输入 URLwww.*****.com时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它与页面请求一起发送到您的站点。

Cookie 有哪些用途?

最根本的用途是:Cookie 能够帮助 Web 站点保存有关访问者的信息。更概括地说,Cookie 是一种保持Web 应用程序连续性(即执行“状态管理”)的方法.使 Web 站点记住您.

什么是会话Session?

当用户访问您的站点时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束。

参考地址

;en-us;307598

cookie欺骗原理

正如我们所知道的,在网络词汇中,cookie是一个特殊的信息,虽然只是服务器存于用户计算机上的一个文本文件,但由于其内容的不寻常性(与服务器有一定的互交性,且常会存储用户名,甚至口令,或是其它一些敏感信息,例如在江湖或是一些社区中,常会用cookie来保存用户集分,等级等等)。因而成为一些高手关注的对象,借此来取得特殊权限,甚至攻克整个网站。以下是自己在xp,2003上做过的测试关于javascrīpt中对cookie的应用。

一、cookie的建立

在讲如何建立cookie之前,我们先来了解一下cookie的基本格式:

cookiename+cookievalue;expire=expirationdategmt;path=urlpath;domain=sitedomain

其中各项以;分开,首先是指定cookie的名称,并为其赋值。接下来分别是cookie的有效期,url路径以及域名,在这几项中,除了第一项以外,其它部分均为可先项。

我们来看一段代码,了解一下cookie究竟是怎样建立的:

HTMLHEADTITLESet a cookie based on a form/TITLE 

scrīpt LANGUAGE=javascrīpt

!--

expireDate = new Date;

expireDate.setMonth(expireDate.getMonth()+6);

userName = "" ;

if (document.cookie!="") {

userName =document.cookie.split("=")[1];

}

function nameField_onblur() {

var userName;

userName=document.myform.nameField.value;

document.cookie="userName="+userName+";expires="+expireDate.toGMTString();

alert(document.cookie);

}

//--

/scrīpt/HEAD

BODY BGCOLOR="WHITE" ōnLoad="document.myform.nameField.value = userName"

form NAME="myform"

H1Enter your name:

INPUT TYPE="TEXT" NAME="nameField" ōnBlur="return nameField_onblur()"/H1

/form/BODY/HTML

1,scrīpt LANGUAGE="java scrīpt" TYPE="TEXT/javascrīpt"

脚本开始的标记,由此一句告诉浏览器以下将是javascrīpt.

2,!-- Hide scrīpt from older browsers

为了防止浏览器不能识别脚本,而让浏览器误以为是HTML注释而忽略它。

3,expireDate = new Date

获取当前日期,并存入变量expireDate中。

4,expireDate.setMonth(expireDate.getMonth()+6)

获取当前月份值,将其加6后设置为expireDate的月份总值部分。这意味着本cookie的有效期为6个月。

5,if (document.cookie != "")

如果document的值不为空,相当于检查用户硬盘上是否已经有了cookie。

6,userName = document.cookie.split("=")[1]

此处用到了split("=")函数,它的功能是把cookie记录分割为数组,cookie的名为cookie[0],值为cookie[1],以此类推。所以此处document.cookie.split("=")[1]返回的值是此cookie的值。在此句中将值赋给了变量userName。

7,function nameField_onblur()()

设置名为nameField_onblur()的函数。

8,document.cookie = "userName="+userName+";expires=" + expireDate.toGMTString()

此句是将设置好的cookie写入用户硬盘。expireDate.toGMTString()把expireDate中的值转换为文本字符串,这样才能写入cookie中。

9,onLoad="document.myform.nameField.value = userName"

当页面载入时,把username的值写入文本框(如果有的话)。

10,onBlur="nameField_onblur()"

当用户离开文本框时,onBlur调用函数nameField_onblur()。

既然我们可以建立cookie,那么读取也不是什么难事,请接着往下看!

二、读取和显示cookie

一般来说,cookie的作者并不希望cookie被显示出来,这是当然的!天知道里面写了些什么!?然而这也是我们想要读出它的原因!~~~:D

HTMLHEADTITLECookie Check/TITLE/HEAD

BODY BGCOLOR="WHITE"

H2

scrīpt LANGUAGE=javascrīpt 

!-- Hide scrīpt from older browsers

var thisCookie;

if (document.cookie == "") {

如何为magento 设置 cookieless domain

本来使用Forms Authentication进行用户验证的方式是最常见的,但系统地阐明其方法的文章并不多见,网上更多的文章都是介绍其中某一部分的使用方法或实现原理,而更多的朋友则发文询问如何从头到尾完整第实现用户的注册、登录。因此,本文计划通过一个实际的例子,介绍如何基于Forms Authentication实现:

用户注册(包括密码的加密存储)

用户登录(包括密码的验证、设置安全Cookie)

用户实体替换(使用自己的类型作为HttpContext.User的类型)

有关Forms Authentication的原理等内容不属于本文的讨论范畴,大家可以通过在搜索引擎中输入“Forms Authentication”、“Forms身份验证”、“窗体身份验证”等关键词来查看更多资源。本文仅从实用的角度介绍如何使用这一技术。

不使用Membership

本文介绍的实现方式不依赖ASP.NET 2.0提供的Membership功能。这主要是因为,如果使用Membership,就必须用aspnet_regsql.exe实用工具配置数据库,否则就得自己写自定义的MembershipProvider。

如果用aspnet_regsql.exe配置数据库,就会导致数据库中出现很多我们实际并不需要的表或字段。此外更重要的是,默认的SqlMembershipProvider给很多数据表添加了ApplicationID列,其初衷可能是希望可以将多个应用程序的用户全部放在一个库里,但又能彼此隔离。但实际情况是,每个应用程序都在其自身的数据库中保存用户数据。因此,引入这个ApplicationID无端地在每次查找用户时增加了额外的条件。

另一方面,如果考虑自己实现一个MembershipProvider,因为工作量巨大,有点得不偿失。

但是,如果不使用Membership,也就无法享受ASP.NET 2.0中新增的Login等控件的便利了。

与Forms Authentication相关的配置

在web.config文件中,system.web/authentication配置节用于对验证进行配置。为authentication节点提供mode="Forms"属性可以启用Forms Authentication。一个典型的authentication配置节如下所示:

authentication mode="Forms"

forms

name=".ASPXAUTH"

loginUrl="login.aspx"

defaultUrl="default.aspx"

protection="All"

timeout="30"

path="/"

requireSSL="false"

slidingExpiration="false"

enableCrossAppRedirects="false"

cookieless="UseDeviceProfile"

domain=""

/

/authentication

以上代码使用的均是默认设置,换言之,如果你的哪项配置属性与上述代码一致,则可以省略该属性。例如forms name="MyAppAuth" /。下面依次介绍一下各种属性:

name——Cookie的名字。Forms Authentication可能会在验证后将用户凭证放在Cookie中,name属性决定了该Cookie的名字。通过FormsAuthentication.FormsCookieName属性可以得到该配置值(稍后介绍FromsAuthentication类)。

loginUrl——登录页的URL。通过FormsAuthentication.LoginUrl属性可以得到该配置值。当调用FormsAuthentication.RedirectToLoginPage()方法时,客户端请求将被重定向到该属性所指定的页面。loginUrl的默认值为“login.aspx”,这表明即便不提供该属性值,ASP.NET也会尝试到站点根目录下寻找名为login.aspx的页面。

defaultUrl——默认页的URL。通过FormsAuthentication.DefaultUrl属性得到该配置值。

protection——Cookie的保护模式,可取值包括All(同时进行加密和数据验证)、Encryption(仅加密)、Validation(仅进行数据验证)和None。为了安全,该属性通常从不设置为None。

timeout——Cookie的过期时间。

path——Cookie的路径。可以通过FormsAuthentication.FormsCookiePath属性得到该配置值。

requireSSL——在进行Forms Authentication时,与服务器交互是否要求使用SSL。可以通过FormsAuthentication.RequireSSL属性得到该配置值。

slidingExpiration——是否启用“弹性过期时间”,如果该属性设置为false,从首次验证之后过timeout时间后Cookie即过期;如果该属性为true,则从上次请求该开始过timeout时间才过期,这意味着,在首次验证后,如果保证每timeout时间内至少发送一个请求,则Cookie将永远不会过期。通过FormsAuthentication.SlidingExpiration属性可以得到该配置值。

enableCrossAppRedirects——是否可以将以进行了身份验证的用户重定向到其他应用程序中。通过FormsAuthentication.EnableCrossAppRedirects属性可以得到该配置值。为了安全考虑,通常总是将该属性设置为false。

cookieless——定义是否使用Cookie以及Cookie的行为。Forms Authentication可以采用两种方式在会话中保存用户凭据信息,一种是使用Cookie,即将用户凭据记录到Cookie中,每次发送请求时浏览器都会将该Cookie提供给服务器。另一种方式是使用URI,即将用户凭据当作URL中额外的查询字符串传递给服务器。该属性有四种取值——UseCookies(无论何时都使用Cookie)、UseUri(从不使用Cookie,仅使用URI)、AutoDetect(检测设备和浏览器,只有当设备支持Cookie并且在浏览器中启用了Cookie时才使用Cookie)和UseDeviceProfile(只检测设备,只要设备支持Cookie不管浏览器是否支持,都是用Cookie)。通过FormsAuthentication.CookieMode属性可以得到该配置值。通过FormsAuthentication.CookiesSupported属性可以得到对于当前请求是否使用Cookie传递用户凭证。

domain——Cookie的域。通过FormsAuthentication.CookieDomain属性可以得到该配置值。

以上针对system.web/authentication/forms节点的介绍非常简略,基本上是对于文档进行的额外说明。有关forms节点的更多说明,请参见MSDN文档()。

FormsAuthentication类

FormsAuthentication类用于辅助我们完成窗体验证,并进一步完成用户登录等功能。该类位于system.web.dll程序集的System.Web.Security命名空间中。通常在Web站点项目中可以直接使用这个类,如果是在类库项目中使用这个类,请确保引用了system.web.dll。

前一节已经介绍了FormsAuthentication类的所有属性。这一节将介绍该类少数几个常用的方法。

RedirectToLoginPage方法用于从任何页面重定向到登录页,该方法有两种重载方式:

public static void RedirectToLoginPage ()

public static void RedirectToLoginPage (string extraQueryString)

两种方式均会使浏览器重定向到登录页(登录页的URL由forms节点的loginUrl属性指出)。第二种重载方式还能够提供额外的查询字符串。

RedirectToLoginPage通常在任何非登录页的页面中调用。该方法除了进行重定向之外,还会向URL中附加一个ReturnUrl参数,该参数即为调用该方法时所在的页面的URL地址。这是为了方便登录后能够自动回到登录前所在的页面。

RedirectFromLoginPage方法用于从登录页跳转回登录前页面。这个“登录前”页面即由访问登录页时提供的ReturnUrl参数指定。如果没有提供ReturnUrl参数(例如,不是使用RedirectToLoginPage方法而是用其他手段重定向到或直接访问登录页时),则该方法会自动跳转到由forms节点的defaultUrl属性所指定的默认页。

此外,如果forms节点的enableCrossAppRedirects属性被设置为false,ReturnUrl参数所指定的路径必须是当前Web应用程序中的路径,否则(如提供其他站点下的路径)也将返回到默认页。

RedirectFromLoginPage方法有两种重载形式:

public static void RedirectFromLoginPage

(string userName, bool createPersistentCookie)

public static void RedirectFromLoginPage

(string userName, bool createPersistentCookie, string strCookiePath)

userName参数表示用户的标识(如用户名、用户ID等);createPersistentCookie参数表示是否“记住我”;strCookiePath参数表示Cookie路径。

RedirectFromLoginPage方法除了完成重定向之外,还会将经过加密(是否加密取决于forms节点的protection属性)的用户凭据存放到Cookie或Uri中。在后续访问中,只要Cookie没有过期,则将可以通过HttpContext.User.Identity.Name属性得到这里传入的userName属性。

此外,FormsAuthentication还有一个SignOut方法,用于完成用户注销。其原理是从Cookie或Uri中移除用户凭据。

小结

好了,至此所需要掌握的基础知识就齐备了,接下来我们将实现用户注册、登录等功能。

二 用户注册与登录

从这一部分开始,我们将通过一个实际的完整示例来看一下如何实现用户注册与登录。在介绍注册与登录之前,我们首先介绍一下如何判断用户是否已登录,并未后面的示例编写一些基础代码。

判断用户是否已经登录

首先,在Web站点项目中添加一个MasterPage,例如MasterPage.master。在这个母版页的ContentPlaceHolder控件之前、From标签之内插入如下代码:

asp:Panel ID="pnlAnonymous" runat="server"

asp:LinkButton ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click"

/asp:LinkButton |

asp:HyperLink ID="lnkRegister" runat="server" NavigateUrl="~/register.aspx" Text="注册"

/asp:HyperLink

/asp:Panel

asp:Panel ID="pnlLoggedin" runat="server"

欢迎您,asp:Label ID="lblUserName" runat="server"/asp:Label!

[asp:LinkButton ID="btnLogout" runat="server" Text="注销"

onclick="btnLogout_Click"/asp:LinkButton]

/asp:Panel

asp:Panel ID="pnlNavigate" runat="server"

asp:HyperLink ID="lnkDefault" runat="server" NavigateUrl="~/default.aspx" Text="首页"

/asp:HyperLink |

asp:HyperLink ID="lnkTest" runat="server" NavigateUrl="~/test.aspx" Text="测试页"

/asp:HyperLink

/asp:Panel

这里提供了三个Panel控件——pnlAnonymous、pnlLoggedin和pnlNavigate。pnlAnonymous用于在用户未登录时显示“登录”和“注册”链接;pnlLoggedin用于在用户已登录时显示用户信息(如用户名和到用户个人信息页的链接等,这里仅显示用户名),以及一个“注销”按钮;pnlNavigate在任何时候都显示,是站点的导航栏。

现在我们要实现的是,判断用户是否登录,并显示pnlAnonymous和pnlLoggedin二者之一。这里,如果是使用ASP.NET 2.0 Membership,则可以方便地使用LoginView、LoginName和LoginStatus等控件实现这些功能;然而我们不得不为此忍受Membership所带来的庞大而繁多的数据库对象,或者花更多时间去编写自定义的MembershipPorvider。

这一系列的第一部分曾介绍过,如果用户已经登录,则可以从HttpContext.User.Identity.Name得到已登录用户的标识(通常是用户名)。然而,如果用户未登录,这个值则为空字符串。因此,通过判断该值是否为空字符串,即可的值用户是否已登录。

谁有asp生成html的具体教程,原理,程序都行

ASP是利用FSO的方法最常见.

如果要学习请下载动易新闻系统,在国内系统中算是很出色.全站生成HTML

下面是一个比较简单的实例

%

'当目标页面的包含文件即#include的页面里边存在response.End()的时候本程序有问题

'注意:本文件一定要放在filename指向的文件的同一目录下

dim hughchiu_rtcode

Function get_exe_code(filename)

dim execode

dim tmp_str

Dim re,re1,content,fso,f,aspStart,aspEnd

dim ms,m

execode = ""

set fso=CreateObject("Scripting.FileSystemObject")

set f=fso.OpenTextFile(server.mappath(filename))

content=f.ReadAll

f.close

set f=nothing

set fso=nothing

set re = new regexp

re.ignorecase = true

re.global = true

re.pattern = "\\%\@[^\%]+\%\"

content = re.replace(content,"")

re.global = false

re.pattern = "\\!\-\-\s*\#include\s*file\s*=\s*\""([^\""]+)\""\s*\-\-\"

do

set ms = re.execute(content)

if ms.count0 then

set m = ms(0)

tmp_str = get_exe_code(m.submatches(0))

content = re.replace(content, tmp_str)

else

exit do

end if

loop

set m = nothing

set ms = nothing

re.pattern="^\s*="

aspEnd=1

aspStart=inStr(aspEnd,content,"%")+2

set re1=new RegExp

re1.ignorecase = true

re1.global = false

re1.pattern = "response\.Write(.+)"

do while aspStartaspEnd+1

execode = execodevbcrlf" hughchiu_rtcode = hughchiu_rtcode"""replace( replace(Mid(content,aspEnd,aspStart-aspEnd-2),"""",""""""), vbcrlf, """vbcrlf""")""""vbcrlf

aspEnd=inStr(aspStart,content,"%\")+2

tmp_str = Mid(content,aspStart,aspEnd-aspStart-2)

do

set ms = re1.execute(tmp_str)

if ms.count0 then

set m = ms(0)

tmp_str = re1.replace(tmp_str, " hughchiu_rtcode = hughchiu_rtcode"m.submatches(0))

else

exit do

end if

loop

set m = nothing

set ms = nothing

execode = execode re.replace(tmp_str,"hughchiu_rtcode = hughchiu_rtcode")

aspStart=inStr(aspEnd,content,"%")+2

loop

set re1 = nothing

set re=nothing

execode = execodevbcrlf" hughchiu_rtcode = hughchiu_rtcode"""replace( replace(Mid(content,aspEnd), """", """"""), vbcrlf, """vbcrlf""" )""""vbcrlf

get_exe_code = "%"execode"%\"

End Function

function asp2html(filename)

dim code

code = replace( replace( replace( get_exe_code(filename), "hughchiu_rtcode = hughchiu_rtcode"""""vbcrlf, "" ), "%", "" ), "%\", "" )

'response.Write(code)

execute(code)

'response.Write( hughchiu_rtcode )

asp2html = hughchiu_rtcode

end function

%

使用范例:

set fso=CreateObject("Scripting.FileSystemObject")

set f=fso.CreateTextFile( server.mappath( "youpage.htm" ), true )

f.WriteLine( asp2html("youpage.asp") )

f.close

set f = nothing

set fso = nothing

ASPNET的问题

在点击按钮的动作事件中 在该事件最后增加一行代码:

Response.AddHeader("Refresh", "0");

或者 使用Response.Redirect(""); 其中引号内是跳转到的网页,可以是本来那个页面,不明白可以再问我!

(责任编辑:IT教学网)

更多

推荐管理维护文章