搜档网
当前位置:搜档网 › Session管理和维护

Session管理和维护

Session管理和维护 asp

5.1.1 Session 对象简介

Session对象其实指的就是用户从到达某个站点直到离开为止的那段时间内,服务器端分配给用户的一个存储信息的全局变量的集合,这些变量可以是自动生成的,也可以是编程者在服务器端脚本定义的。

当用户在应用程序的 Web 页面之间跳转时,存储在Session 对象中的变量将不会丢失,而且在整个用户会话中会一直在下去。

当用户请求 ASP 应用程序的某个页面时,若用户尚未建立 Session 对象,服务器端就会自动创建一个 Session 对象,并指定一个惟一的 Session ID,这个 ID 只允许此Session ID 的拥有者使用,不同的用户的 Session 存储着各自特定的信息,如用户姓名、性别、浏览器类型、显示器分辩率、访问时间等,这将有利于服务器对用户身份的鉴别,从而实现 Web 页面的个性化。

Session 对象有两种结束方法:一种是隐式方法,另一种是显式方法。隐式方法是当用户访问 Web 服务器的时间间隔超过 Session 对象的 TimeOut 属性设置的时间限制时,Session 对象自动结束;显式方法则是利用 Session 对象的 Abadon 方法来中止

Session 。当 Session 结束之后,Session 对象的变量也将被释放,其值不可再用。

session语法:

session.集合∣属性∣方法

举例:

学好session加油

<%

session("greeting")="ASP“

Response.write(session("greeting"))

%>

Session对象的集合、属性、方法、事件

使用Session对象需要注意以下两点:

1、Session对象只适于支持cookie功能的浏览器,并且cookie功能必须是打开的,否则Session对象中的变量就会失效。

2、Session对象中记录的是特定用户的信息,对于不同的用户,就算是相同的Session变量,它们所代表的值也不一样。

5.2.2利用Session 存储信息

一:语法

Session(variable)=value

其中参数variable表示Session变量的名称,value表示要保存的信息,可以是常量、变量或是表达式。

二:Session信息的例子:

(1)常见例子:

rotected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Session("user_name") = "李玉玲"

Session("age") = 21

End Sub

(2) Session的使用:

在session中加入和删除数据

putValue (String, Object) 设定session内容

removeValue (String) 删除seesion内容

(3)得session中变量内容:

getValue (String) 返回指定变量的内容

getValueNames () 返回所有变量的名称

(4)常用方法:

getId () 返回session ID

isNew () 判定session是否为新

invalidate () 删除session

getCreactionTime () 返回session建立的时间

getLastAccessedTime () 返回seesion最后访问时间

(三).net session 介绍一三种Session存储方式

对于https://www.sodocs.net/doc/b610533351.html,的程序来说,session是一个必需要了解的对象。

下面就对session做一个具体介绍。

简单来说,Session就是服务器给客户端的一个编号,当一台web服务器运行时,可能是有多个用户都在浏览这台服务器上的网站,当每个用户首次与这台服务器建立连接时,它就与这个服务器建立了一个Session,同时服务器就会自动为其分配一个SessionId,用以标识这个用户的唯一身分,这个Session就是有服务器随机产生的一个由24个字符组成的字符串。

这个唯一的SessionId还是有很大的实际意义,当一个用户提交表单时,浏览器就会将用户的SessionId自动附加在HTTP头信息中,当服务器处理完这个表单后,就会将结果返回给SessionId所对应的用户。

如下是Web.config如何配置Session的:

cookieless=" true | false "

timeout=" number of minutes "

stateConnectionString=" tcpip=server:port "

sqlConnectionString=" sql connection string "

stateNetworkTimeout=" number of seconds " />

其中各个节点属性:

mode: Session的存储方式(必有的属性)。

InProc:将Session存到进程内(这是Default值。)

off:禁用Session.

StateServer:将Session存到独立的状态服务中(https://www.sodocs.net/doc/b610533351.html, State Service). SqlServer:将Session存到SqlServer中。

Cookieless:设置客户端Session存储的方式。

false:使用Cookie模式(default).

true:使用Cookieless模式。

timeout:设置Session过期时间(default is 20 minutes)

stateConnectionString: 设置Session独立存放的状态服务所在服务器的名称(地址)和端口号,当mode=“stateserver时,这个属性就是必须的。

sqlConnectionString:设置与Sqlserver的连接字符串,当mode="sqlserver"时,这个属性时必须的。

stateNetWorkTimeout:设置当mode=“StateServer”时,经过多少秒空闲后,断开web服务器与存储状态信息服务器的TCP/IP连接(default is 10 seconds).

https://www.sodocs.net/doc/b610533351.html,中客户端Session的存储

https://www.sodocs.net/doc/b610533351.html,中,默认是使用Cookie存储Session的,如果是将cookieless="false",改成cookieless="true",则session就不用cookie来存储了,而是使用url来存储。

https://www.sodocs.net/doc/b610533351.html,服务器端session存储在进程内(inproc)

当mode="Inproc"时,服务器的Session存储在IIS进程中,当IIS关闭,重启时,这些Session信息就会丢失,但这种模式最大的好处就是性能提高。

https://www.sodocs.net/doc/b610533351.html,服务器端Session存储在进程外(StateServer)

当mode="StateServer"时,服务器的Session就存储在"https://www.sodocs.net/doc/b610533351.html, State Server"这个服务的进程中,在服务中找到名为:“https://www.sodocs.net/doc/b610533351.html, State Service”的服务,启动这个服务,在资源管理器的进程中就能找到一个名为:“aspnet_state.exe"的进程,这个就是我们保存 Session的进程。

”https://www.sodocs.net/doc/b610533351.html, State Server"服务可以与Web服务器分开.eg:web服务器在192.168.0.100上,“https://www.sodocs.net/doc/b610533351.html, state service"服务在192.168.0.101上,则可以进行设置:

mode="StateServer" stateConnection="tcpip=192.168.1.101:42424".

https://www.sodocs.net/doc/b610533351.html,服务器端Session存储到SQLServer中(SQLServer),

当mode="sqlserver"时,服务器的Session就是存储到Sql server中建立一个存储Session的数据库。

执行此sql脚本后,会看到一个新增的aspstate数据库,但这个数据库中,只有存储过程,没有用户表,用户表放到了tempdb这个数据库中去了,ASpstateTempSessions和ASPStateTempApplications,Session信息存储到了ASPStateTempApplication存储了asp 中Application对象信息。

5.1.3利用session存储数组信息

Session对象可以提供动态关联数组,在数组中存储信息。在Session对象中存储单纯变量和对象变量。要在Session对象中存储变量,需指定Session对象中已命名条目的值。可以利用Contents集合来存储数组信息。Contents集合可以包括所有未使用标记而为该会话建立的项目。也可以用于遍历集合并检索出会话中所有项目的列表。

下面的例子说明了其用法。

<%

Session("name")="Tom"

Session("Sex")="male"

Session("year")="34"

For I=1 to Session.Contents.Count

Response.Write("
"&Session.Contents(I))

Next

Session.Abandon

%>

此外,在将对象存储到Session 对象之前,必须了解它使用的是哪一种线程模型。只有那些标记为“Both”的对象才能存储在没有锁定单线程会话的Session 对象中。

若将一个数组存储在Session对象中,请不要直接更改存储在数组中的元素。例如,下列的脚本无法运行。

<% Session("StoredArray")(3) = "new value" %>

这是因为Session对象是作为集合被实现的。数组元素StoredArray(3) 未获得新的赋值。而此值将包含在Application 对象集合中,并将覆盖此位置以前存储的任何信息。

在将数组存储在Session对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,应再将数组全部存储在Session 对象中,这样所做的任何改动将被存储下来。下列的脚本对此进行演示。

---file1.asp---

<%

'Creating and initializing the array

Dim MyArray()

Redim MyArray(5)

MyArray(0) = "hello"

MyArray(1) = "some other string"

'Storing the array in the Session object

Session("StoredArray") = MyArray

Response.Redirect("file2.asp")

%>

---file2.asp---

<%

'Retrieving the array from the Session Object

'and modifying its second element

LocalArray = Session("StoredArray")

LocalArray(1) = " there"

'printing out the string "hello there"

Response.Write(LocalArray(0)&LocalArray(1))

'Re-storing the array in the Session object

'This overwrites the values in StoredArray with the new values

Session("StoredArray") = LocalArray

%>

示例

下列代码将字符串MyName 分配给名为name 的会话变量,并给名为year 的会话变量指定一个值,而且为some.Obj 组件的实例指定一个名为myObj 的变量。

Session("name") = "MyName"

Session("year") = 96

Set Session("myObj") = Server.CreateObject("someObj")

%>

除了SessionID,在每个Session中还包含很多其他信息。但是对于编写ASP或https://www.sodocs.net/doc/b610533351.html, 的程序与来说,最有用的还是可以通过访问ASP/https://www.sodocs.net/doc/b610533351.html,的内置Session对象,为每个用户存储各自的信息。例如我们想了解一下访问我们网站的用户浏览了几个页面,我们可能在用户可能访问到每个的页面中加入:

<%

If Session("PageViewed") = ""Then

Session("PageViewed") = 1

Else

Session("PageViewed") = Session("PageViewed") + 1

End If

%>

通过以下这句话可以让用户得知自己浏览了几个页面:

可能有些有些读者会问:这个看似像是数组的Session(“..”)是哪里来的?需要我定义吗?实际上,这个Session对象是具有ASP解释能力的的WWW服务器的内建对象。也就是说ASP的系统中已经给你定义好了这个对象,你只需要使用就行了。其中Session(“..”)中的..就好像变量名称,Session(“..”)=$$$中的$$$就是变量的值了。你只需要写上句话,在这个用户的每个页面中都可以访问..变量中的值了。

其实ASP一共内建了7个对象,有Session、Application、Cookie、Response、Request、Server等。在其他的服务器端脚本语言如JSP、PHP等中也有其类似的对象,只是叫法或者使用方法上不太一样。

ASP Session的功能的缺陷

目前ASP的开发人员都正在使用Session这一强大的功能,但是在他们使用的过程中却发现了ASP Session有以下缺陷:

进程依赖性:ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。

Session状态使用范围的局限性:刚一个用户从一个网站访问到另外一个网站时,这些Session信息并不会随之迁移过去。例如:新浪网站的WWW服务器可能不止一个,一个用户登录之后要去各个频道浏览,但是每个频道都在不同的服务器上,如果想在这些WWW服务器共享Session信息怎么办呢?

Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。

鉴于ASP Session的以上缺陷,微软的设计者们在设计开发 https://www.sodocs.net/doc/b610533351.html, Session时进行了相应的改进,完全克服了以上缺陷,使得https://www.sodocs.net/doc/b610533351.html, Session成为了一个更加强大的功能。

Web.config文件简介

有的https://www.sodocs.net/doc/b610533351.html,程序员说:Web.config文件?我从来没有听说过啊,可是我写的程序不是也能很正常的运转吗?是的,你说得没错,没有Web.config文件程序是可以正常运行的。但是,如果你做了一个大型的网站,需要对整个网站做一些整体配置,例如整个网站的页面使用何种语言编写的、网站的安全认证模式、Session信息存储方式等,这时你就需要使用Web.config文件了。虽然Web.config文件中的某些选项是可以通过IIS配置的,但是如果在Web.config中也有相应的设置就会覆盖掉IIS中的配置。而且,Web.config文件的最大

的便利之处就是可以在https://www.sodocs.net/doc/b610533351.html,页面中通过调用System.web名字空间访问Web.config中的设置。

Web.config有两种,分别是服务器配置文件和Web应用程序配置文件,他们都名为Web.config。在这个配置文件中会保存当前IIS服务器中网页的使用哪种语言编写的、应用程序安全认证模式、Session信息存储方式的一系列信息。这些信息是使用XML语法保存的,如果想对其编辑,使用文本编辑器就行了。

其中服务器配置文件会对IIS服务器下所有的站点中的所有应用程序起作用。在.NET Framework 1.0中,服务器的Web.config文件是存在:\WinNT\https://www.sodocs.net/doc/b610533351.html,\Framework\v1.0.3705中的。

而Web应用程序配置文件Web.config则保存在各个Web应用程序中。例如:当前网站的根目录\Inetpub\wwwroot,而当前的Web应用程序为MyApplication,则Web应用程序根目录就应为:\Inetpub\wwwroot\MyApplication。如果你的网站有且只有一个Web应用程序,一般说来应用程序的根目录就是\Inetpub\wwwroot。如果想添加一个Web应用程序,在IIS 中添加一个具有应用程序起始点的虚拟目录就行了。这个目录下的文件及目录将被视为一个Web应用程序。但是,这样通过IIS添加Web应用程序是不会为你生成Web.config文件的。如果想创建一个带有Web.config文件的Web应用程序,需要使用Visual https://www.sodocs.net/doc/b610533351.html,,新建一个Web应用程序项目。

Web应用程序的配置文件Web.config是可选的,可有可无。如果没有,每个Web应用程序会使用服务器的Web.config配置文件。如果有,则会覆盖服务器Web.config配置文件中相应的值。

在https://www.sodocs.net/doc/b610533351.html,中,Web.config修改保存后会自动立刻成效,不用再像ASP中的配置文件修改后需要重新启动Web应用程序才能生效了。

Web.config文件中的Session配置信息

打开某个应用程序的配置文件Web.config后,我们会发现以下这段:

mode="InProc"

stateConnectionString="tcpip=127.0.0.1:42424"

sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

cookieless="false"

timeout="20"

/>

这一段就是配置应用程序是如何存储Session信息的了。我们以下的各种操作主要是针对这一段配置展开。让我们先看看这一段配置中所包含的内容的意思。sessionState节点的语法是这样的:

cookieless="true|false"

timeout="number of minutes"

stateConnectionString="tcpip=server:port"

sqlConnectionString="sql connection string"

stateNetworkTimeout="number of seconds"

/>

必须有的属性是

可选的属性是:

https://www.sodocs.net/doc/b610533351.html,中客户端Session状态的存储

在我们上面的Session模型简介中,大家可以发现Session状态应该存储在两个地方,分别是客户端和服务器端。客户端只负责保存相应网站的SessionID,而其他的Session信息则保存在服务器端。在ASP中,客户端的SessionID实际是以Cookie的形式存储的。如果用户在浏览器的设置中选择了禁用Cookie,那末他也就无法享受Session的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在https://www.sodocs.net/doc/b610533351.html,中客户端的Session信息存储方式分为:Cookie和Cookieless两种。

https://www.sodocs.net/doc/b610533351.html,中,默认状态下,在客户端还是使用Cookie存储Session信息的。如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下:

找到当前Web应用程序的根目录,打开Web.Config文件,找到如下段落:

mode="InProc"

stateConnectionString="tcpip=127.0.0.1:42424"

sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

cookieless="false"

timeout="20"

/>

这段话中的cookieless="false"改为:cookieless="true",这样,客户端的Session 信息就不再使用Cookie存储了,而是将其通过URL存储。关闭当前的IE,打开一个新IE,重新访问刚才的Web应用程序,就会看到类似下面的样子:

其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx中黑体标出的就是客户端的Session ID。注意,这段信息是由IIS自动加上的,不会影响以前正常的连接。

https://www.sodocs.net/doc/b610533351.html,中服务器端Session状态的存储

准备工作

为了您能更好的体验到实验现象,您可以建立一个叫做SessionState.aspx的页面,然后把以下这些代码添加到中。

这个SessionState.aspx的页面可以用来测试在当前的服务器上是否丢失了Session 信息。

将服务器Session信息存储在进程中

让我们来回到Web.config文件的刚才那段段落中:

mode="InProc"

stateConnectionString="tcpip=127.0.0.1:42424"

sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

cookieless="false"

timeout="20"

/>

当mode的值是InProc时,说明服务器正在使用这种模式。

这种方式和以前ASP中的模式一样,就是服务器将Session信息存储在IIS进程中。当IIS关闭、重起后,这些信息都会丢失。但是这种模式也有自己最大好处,就是性能最高。应为所有的Session信息都存储在了IIS的进程中,所以IIS能够很快的访问到这些信息,这种模式的性能比进程外存储Session信息或是在SQL Server中存储Session信息都要快上很多。这种模式也是https://www.sodocs.net/doc/b610533351.html,的默认方式。

好了,现在让我们做个试验。打开刚才的SessionState.aspx页面,随便输入一些字符,使其存储在Session中。然后,让我们让IIS重起。注意,并不是使当前的站点停止再开始,而是在IIS中本机的机器名的节点上点击鼠标右键,选择重新启动IIS。(想当初使用NT4时,重新启动IIS必须要重新启动计算机才行,微软真是@#$%^&)返回到SessionState.aspx 页面中,检查刚才的Session信息,发现信息已经丢失了。

将服务器Session信息存储在进程外

首先,让我们来打开管理工具->服务,找到名为:https://www.sodocs.net/doc/b610533351.html, State Service的服务,启动它。实际上,这个服务就是启动一个要保存Session信息的进程。启动这个服务后,你可以从Windows任务管理器->进程中看到一个名为aspnet_state.exe的进程,这个就是我们保存Session信息的进程。

然后,回到Web.config文件中上述的段落中,将mode的值改为StateServer。保存文件后的重新打开一个IE,打开SessionState.aspx页面,保存一些信息到Session中。这时,让我们重起IIS,再回到SessionState.aspx页面中查看刚才的Session信息,发现没有丢失。

实际上,这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其他的服务器的进程中。这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这样:stateConnectionString="tcpip=192.168.0.2:42424"。当然,不要忘记在192.168.0.2的计算机中装上.NET Framework,并且启动https://www.sodocs.net/doc/b610533351.html, State Services服务。

将服务器Session信息存储在SQL Server中

首先,还是让我们来做一些准备工作。启动SQL Server和SQL Server代理服务。在SQL Server中执行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件:

[system drive]\winnt\https://www.sodocs.net/doc/b610533351.html,\Framework\[version]\

然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。但是这个数据库中只是些存储过程,没有用户表。实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中的,另外一个ASPStateTempApplications表存储了ASP中Application对象信息。这两个表也是刚才的那个脚本建立的。另外查看管理->SQL Server代理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息的。

接着,我们返回到Web.config文件,修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:

sqlConnectionString="data source=localhost; Integrated Security=SSPI;"

其中data source是指SQL Server服务器的IP地址,如果SQL Server与IIS是一台机子,写127.0.0.1就行了。Integrated Security=SSPI的意思是使用Windows集成身份验证,这样,访问数据库将以https://www.sodocs.net/doc/b610533351.html,的身份进行,通过如此配置,能够获得比使用userid=sa;password=口令的SQL Server验证方式更好的安全性。当然,如果SQL Server 运行于另一台计算机上,你可能会需要通过Active Directory域的方式来维护两边验证的一致性。

同样,让我们做个试验。向SessionState.aspx中添加Session信息,这时发现Session 信息已经存在SQL Server中了,即使你重起计算机,刚才的Session信息也不会丢失。现在,你已经完全看见了Session信息到底是什么样子的了,而且又是存储在SQL Server中的,能干什么就看你的发挥了,哈哈。

总结

通过这篇文章,你可以看到在Session的管理和维护上,https://www.sodocs.net/doc/b610533351.html,比ASP有了很大的进步,我们可以更加随意的挑选适合的方法了。对于企业级的应用来说,这无疑对于服务器的同步、服务器的稳定性、可靠性都是有利的。相信在强大的微软支持下,新一代的电子商务平台将会搭建的更好!

同时,大家也会发现,在这个整个技术中包括了操作系统、Web服务及数据库多种技术的整合。我相信,也许Windows没有Unix稳定,IIS没有Apache稳定,SQL Server也没有Oracle强大,但是,谁可以将他们如此完美的联动到一起呢?所以说,虽然微软每一方面都不是太强,但是如果把微软的东西都整合到一起,谁敢说他不强大呢?微软就是微软!

Session用法小结

https://www.sodocs.net/doc/b610533351.html, Session详解及Session莫名丢失的原因及解决办法 作者:YanJun 日期:2007-07-29 字体大小: 小中大 Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,我们会在下面的实验中见到它的实际样子。 这个唯一的SessionID是有很大的实际意义的。当一个用户提交了表单时,浏览器会将用户的SessionID自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionID所对应的用户。试想,如果没有SessionID,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。当然,SessionID还有很多其他的作用,我们会在后面提及到。 除了SessionID,在每个Session中还包含很多其他信息。但是对于编写ASP或https://www.sodocs.net/doc/b610533351.html,的程序与来说,最有用的还是可以通过访问ASP/https://www.sodocs.net/doc/b610533351.html,的内置Session对象,为每个用户存储各自的信息。例如我们想了解一下访问我们网站的用户浏览了几个页面,我们可能在用户可能访问到每个的页面中加入: <% If Session("PageViewed") = ""Then Session("PageViewed") = 1 Else Session("PageViewed") = Session("PageViewed") + 1 End If %> 通过以下这句话可以让用户得知自己浏览了几个页面:

session使用方法

session使用方法 在PHP开发中对比起Cookie,session是存储在服务器端的会话,相对安全,并且不像Cookie 那样有存储长度限制,本文简单介绍session的使用。 由于Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改Session 内容。实际上在服务器端的Session 文件,PHP 自动修改session文件的权限,只保留了系统读和写权限,而且不能通过ftp 修改,所以安全得多。PHP China 开源社区门户k%W%e2C Y 对于Cookie 来说,假设我们要验证用户是否登陆,就必须在Cookie 中保存用户名和密码(可能是md5 加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能只做一次验证。为什么呢?因为客户端Cookie 中的信息是有可能被修改的。假如你存储$admin 变量来表示用户是否登陆,$admin 为true 的时候表示登陆,为false 的时候表示未登录,在第一次通过验证后将$admin 等于true 存储在Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为true 的$admin 变量那不是就立即取的了管理权限么?非常的不安全。 而Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改session文件的内容,因此我们可以单纯存储一个$admin 变量来判断是否登陆,首次验证通过后设置$admin 值为true,以后判断该值是否为true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。而且可以减少每次为了验证Cookie 而传递密码的不安全性了(session验证只需要传递一次,假如你没有使用SSL 安全协议的话)。即使密码进行了md5 加密,也是很容易被截获的。 当然使用session还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。我这里就不多说了。 session在php.ini 是否需要设置呢?一般不需要的,因为并不是每个人都有修改PHP.ini 的权限,默认session的存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹里,这个稍后我会介绍。 开始介绍如何创建session。非常简单,真的。 启动session会话,并创建一个$admin 变量: 如果你使用了Seesion,或者该PHP 文件要调用Session 变量,那么就必须在调用Session 之前启动它,使用session_start() 函数。其它都不需要你设置了,PHP自动完成session文件的创建。

课题_Spring MVC中Session的正确用法之我见

Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性、可复用性与易集成性。优良的设计模式遍及各处,使得其框架虽然学习曲线陡峭,但一旦掌握则欲罢不能。初学者并不需要过多了解框架的实现原理,随便搜一下如何使用“基于注解的controller”就能很快上手,而一些书籍诸如“spring in action”也给上手提供了非常优良的选择。 网上的帖子多如牛毛,中文的快速上手,英文的深入浅出。这样看来,Spring的学习简直是一个轻松愉快的过程。 但是!! 关于Spring中session的使用,大部分资料都讳莫如深。也许这个问题太过容易推断出?大部分资料都没有包括我下面所将要陈述的内容。关于Spring中session的正确使用方法,这里甚至建议直接使用Session。但这种方法显然违背了Spring “technology agnostic” (这个名词我理解意思就是无论你是在什么具体的应用中使用类似的控制逻辑,servlet、一个本地JVM 程序或者其他,你的Controller都可以得到复用)的初衷。 于是我开始从庞大的网络资源和书籍中搜索关于Session的正确用法及Spring MVC处理Session的机制,其中讲得最深入而且清楚的算是这一篇。从上文的内容,及我所查阅的比如官方文档这种资料中,我可以大约推断出几个要点: 1. Spring框架会在调用完Controller之后、渲染View之前检查Model的信息,并把@SessionAttributes()注释标明的属性加入session中 2. @ModelAttribute在声明Controller的参数的时候,可以用来表明此参数引用某个存在在Model中的对象,如果这个对象已经存在于Model中的话(Model可以在调用Controller之前就已经保存有数据,这应该不仅仅因为HandlerInterceptor或者 @ModelAttribute标记的方法已经显式的将一些对象加入到了Model对象中,也因为Spring会默认将一些对象加入到Model中,这一点很重要)。 3. 如果Session中已经存在某个对象,那么可以直接使用ModelAttribute声明Controller的参数,在Controller中可以直接使用它。 其中1很明确,我提到的那篇文章主要就在说明这一点。而从2和3我们也许可以大胆地推出一个结论: Spring会在调用Controller之前将session中的对象填入Model中 因为想从2得到3,这个结论就显得比较自然。那么事实上是不是如此呢?可以做一个小实验。仿效我所引用的那篇文章,我写了如下代码: @Controller @RequestMapping("/user") @SessionAttributes("userId") public class UserController { @RequestMapping(value="/login", method=GET) public String login ( int id, Model model, ServletRequest request, Session session) { model.addAttribute("userId", id); System.out.println("");

《web开发技术(java)》实验四——利用Session完成用户登录功能

《利用Session完成用户登录》 实验指导书 一、实验目的 理解会话对象的功能。 二、实验任务 1、利用会话对象完成用户的模拟登录功能(组织界面输入用户名密码,如果用户名等于neusoft,密码等于123则视作合法用户,并完成登录功能)。登录界面如下: 2、验证用户是否成功登录(如果已经登录显示登录用户信息,否则跳转到登录界面)。 成功登录界面如下:

验证成功登录界面如下: 三、预备知识 1.会话就是驻留服务器上的托管对象,位于JSP容器中。其主要作用是跟踪由一个用户发送的请求。 2.JSP容器与浏览器通过协作使用标准的HTTP协议来实现会话,JSP、Servlet开发人员无需实现会话,也不直接处理会话实现机制。只要能

够使用会话对象即可。 3.获取对象的方法:JSP中直接使用session对象即可,Servlet中需要调用HttpServletRequest实例的getSession()、getSession(flag)方法即可获得。getSession()以及getSession(true)完成的功能是:如果所需的会话不存在,立即创建;getSession(false)完成的功能是:若请求的会话存在,则获取使用,否则返回空值。 4.向会话中添加信息:调用HttpSession实例的setAttribute(String,Object)方法即可将要加的信息添加到Session,但注意如果要添加的属性名同已有的属性名重名,则当前值会覆盖原有的值。 5.获取属性中的信息:调用HttpSession实例的getAttribute(String)方法即可返回需要的值,注意方法的参数为属性的名称。 6.删除属性中的信息:有时根据需要将Session中已有的属性信息予以删除,此时需要调用HttpSession实例的romoveAttribute(String)删除指定的属性。 7.获取会话中所有的属性信息:有时可能根据需要,列出会列出会话中所有的属性值,此时需要调用HttpSession实例的getAttributeNames()方法获取所有的属性名,然后在根据这些属性名分别调用getAttribute(String)方法返回对应的属性值 四、实验步骤 1.创建Web项目 2.创建login.html首页 3.创建完成登录功能的Servlet或JSP

c#下使用cookie和session

c#如何记住用户的信息 记录加密之后的信息,确保用户的信息安全 使用cookie和session记录用户的信息 1、保存时间 session的默认保存时间是24分钟 cookie在没有设置的情况下关闭之后立即结束生命周期 设置cookie的时间,cookie-name.Expires=Date.Now.AddDays();/DateTime.MaxValue;(永久) C#读取设置Cookie 设置: HttpCookie cookie = new HttpCookie("cookieName"); cookie.Value = "name1" HttpContext.Current.Response.Cookies.Add(cookie); 读取: HttpContext.Current.Request.Cookies["cookieName"].Value 判断cookie是否存在: if(HttpContext.Current.Request.Cookies["cookieName"]==null){ //do something } 设置cookie有效期 cookie.Expires = DateTime.Now.AddDays(1); https://www.sodocs.net/doc/b610533351.html,中Cookies的用法(转) 一,cookies 写入 方法1: Response.Cookies["username"].Value="gjy"; Response.Cookies["username"].Expires=DateTime.Now.AddDays(1); 方法2: System.Web.HttpCookie newcookie=new HttpCookie("username"); newcookie.Value="gjy"; newcookie.Expires=DateTime.Now.AddDays(1); Response.AppendCookie(newcookie); 创建带有子键的cookies: System.Web.HttpCookie newcookie=new HttpCookie("user"); newcookie.Values["username"]="gjy"; newcookie.Values["password"]="111";

Session的生命周期

Session的生命周期 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期。 Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon 在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用 request.getSession(true)强制生成Session。 Session什么时候失效? 1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。 2. 调用Session的invalidate方法。 Session对浏览器的要求: 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。 该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说

session应用详解

Session 对象 可以使用Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web 页之间跳转时,存储在Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。 当用户请求来自应用程序的Web 页时,如果该用户还没有会话,则Web 服务器将自动创建一个Session 对象。当会话过期或被放弃后,服务器将终止该会话。 Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session 对象中。有关使用Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。 注意会话状态仅在支持cookie 的浏览器中保留。 语法 Session.collection|property|method 集合 Contents 包含已用脚本命令添加到会话中的项目。 StaticObjects 包含通过 标记创建的并给定了会话作用域的对象。 属性 CodePage 将用于符号映射的代码页。 LCID 现场标识。 SessionID 返回用户的会话验证。 Timeout 应用程序会话状态的超时时限,以分钟为单位。 方法 Abandon 该方法破坏Session 对象并释放其资源。 事件 global.asa 文件中声明下列事件的脚本。 Session_OnEnd Session_OnStart 有关以上事件及global.asa 文件的详细信息, 请参阅Global.asa 参考. 注释 您可以在Session 对象中存储值。存储在Session 对象中的信息在会话及会话作用域内有效。下列脚本演示两种类型的变量的存储方式。 <%

session过期时间设置说明

session过期时间设置说明 一.系统session配置说明 针对承保(prpall)、双核(undwrt)系统中,有两个配置文件可以设置session的过期时间 分别是web.xml和weblogic.xml Web.xml中配置 60 时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。 此例表示Session将在60分钟后过期 weblogic.xml中设置的TimeoutSecs属性值。 Weblogic.xml中配置 TimeoutSecs 1800 时间单位是一秒钟,表示1800秒后失效。 1.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须可以被60整除,(如60,120等)。则按照时间最小的那个为准。 2.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须不可以被60整除(如,45,90等)。则以web.xml设置的时间为准。 3.如果web.xml文件中没有设置,且Weblogic.xml中有配置。则按照Weblogic.xml 的设置为准。 4.为保证session的唯一性,在weblogic环境下,建议只在weblogic.xml中设置。防止出现冲突。

二.疑问 1.web.xml,weblogic.xml同时配置时,为什么会是以时间小的为准? 暂时无解。 2.对应的weblogic.xml 必须配置为分钟的整数倍? 如web=2m weblogic=90s,最终为以web为准。 web=3m weblogic=120s 以 weblogic为准 暂时无解。 3.关于“WEB-INF/config/appconfig/SysConstConfig.xml”中的session时效时间。 从目前情况看, SysConstConfig.xml 这个应该没有使用;那么就是 web.xml 与 weblogic.xml 这两个的配置用谁的问题了。 按网上说法,对应的优先级应该是:自定义xml配置的session>web.xml>weblogic.xml; 个人理解为:自定义的配置最高的原因是因为,我们程序实现判断session时去读取了这个时间;对于web.xml>weblogic.xml,从上述的测试过程中发现并不是如此。 三.配置session方式 WebLogic如何设置session超时时间 1 web.xml 设置WEB应用程序描述符web.xml里的元素。这个值以分钟为 单位,并覆盖weblogic.xml中的TimeoutSecs属性 54 此例表示Session将在54分钟后过期 当设置为-2,表示将使用在weblogic.xml中设置的 TimeoutSecs这个属性值。 当设置为-1,表示Session将永不过期,而忽略在 weblogic.xml中设置的TimeoutSecs属性值。 该属性值可以通过console控制台来设置 2 weblogic.xml 设置WebLogic特有部署描述符weblogic.xml的元素的 TimeoutSecs属性。这个值以秒为单位 TimeoutSecs 3600

JAVA MAIL应用五 (详解PROPERTIES SESSION)

1.Properties(属性对象) 由于JavaMail需要和邮件服务器进行通信,这就要求程序提供许多诸如服务器地址、端口、用户名、密码等信息,JavaMail通过Properties对象封装这些属性西信息。如下面的代码封装了两个属性信息: Properties props=new Properties(); props.put("mail.smtp.host","https://www.sodocs.net/doc/b610533351.html,"); props.put("mail.smtp.auth","true"); 针对不同的的邮件协议,JavaMail规定了服务提供者必须支持一系列属性,下表是针对SMTP 协议的一些常见属性(属性值都以String类型进行设置,属性类型栏仅表示属性是如何被解析的): 属性名属性类型说明 mail.stmp.host String SMTP服务器地址,如https://www.sodocs.net/doc/b610533351.html, mail.stmp.port int SMTP服务器端口号,默认为25 mail.stmp.auth boolean SMTP服务器是否需要用户认证,默认为false https://www.sodocs.net/doc/b610533351.html,er String SMTP默认的登陆用户名 mail.stmp.from String默认的邮件发送源地址 mail.stmp.socketFactory.class String socket工厂类类名,通过设置该属性可以覆盖提供 者默认的实现,必须实现https://www.sodocs.net/doc/b610533351.html,.SocketFactory接 口 mail.stmp.socketFactory.port int指定socket工厂类所用的端口号,如果没有规定, 则使用默认的端口号 mail.smtp.socketFactory.fallbackboolean设置为true时,当使用指定的socket类创建socket 失败后,将使用https://www.sodocs.net/doc/b610533351.html,.Socket创建socket,默认 为true mail.stmp.timeout int I/O连接超时时间,单位为毫秒,默认为永不超时其他几个协议也有类似的一系列属性,如POP3的mail.pop3.host、mail.pop3.port以及IMAP 的mail.imap.host、mail.imap.port等。 更详细的信息请查看com.sun.mail.smtp、com.sun.mail.pop3和com.sun.mail.imap这三个包的Javadoc:https://www.sodocs.net/doc/b610533351.html,/products/javamail/javadocs/index.html。 2.Session(会话对象) Session是一个很容易被误解的类,这归咎于混淆视听的类名。千万不要以为这里的Session 像HttpSession一样代表真实的交互会话,但创建Session对象时,并没有对应的物理连接,它只不过是一对配置信息的集合。Session的主要作用包括两个方面: 1.接收各种配置属性信息:通过Properties对象设置的属性信息; 2.初始化JavaMail环境:根据JavaMail的配置文件,初始化JavaMail环境,以便通过Session对象创建其他重要类的实例。 所以,如果把Session更名为Configure也许更容易理解一些。 Session通过JavaMail配置文件以及程序中设置的Properties对象构建一个邮件处理环境,后续的处理将在Session基础上进行。Session拥有多个静态工厂方法用于创建Session实例。getInstance方法 1.static Session getDefaultInstance(Properties props,Authenticator authenticator):当JVM中已经存在默认的Session实例中,直接返回这个实例,否则创建一个新的Session实例,并将其作为JVM中默认Session实例。这个API很诡异,我们将对它进行详细的讲解。由于这个

charles用法详解

强大的http调试工具charles用法详解 分类:Web开发 Charles是目前最强大的http调试工具,在界面和功能上远强于Fiddler,同时是全平台支持,堪称圣杯级工具,唯一的缺陷是这货是收费的,而且是要¥50美元大洋…当然网上是有破解版的,鄙视下自己,无耻地使用了…放在网盘里,亲可以默默带走,不要留下一片云彩。 破解版传送门。 先安装里面的原版,然后copy charles.jar覆盖到安装目录下的lib目录即可。这是V3.6版,最新版本是V3.8.3,但破解补丁不通用,会导致无法启动。 启动后,圣杯的真面目如上图。

Charles有个会话(session,不是指http中的session)的概念,可以理解为浏览器中的tab,这个功能在需要调试多个站点页面时很实用,当你刷新页面的时候,只会在当前session中捕获请求。 (PS:ctrl+N创建个新的session,ctrl+W关闭当前session) Charles的代理服务器启动就可以使用(会提示给firefox安装插件),如果没有捕获到请求,请清理下浏览器缓存。 界面功能初探

工具条包含了Charles的大部分功能: 有几个功能比较抽象,后面会详细说明。 右键请求出现菜单,Charles的右键菜单功能比fiddler强大太多了。

双击请求进入列表视图,类似fiddler,方便查看和过滤请求。Charles的过滤查找功能非常赞,很快速:

请求详情跟fiddler相似,但直观不少: 工具视图基本讲解完毕,接下来我们用Charles做点事情。 本地代理和远程代理 Charles的代理服务器端口跟fiddler一样都是8888,即你的本机ip:8888。

jsp中session的用法

Session相当于一个数据容器,一个用户只分配一个session,由系统在用户第一次使用时自动创建,程序只要获得即可,当用户没有再请求系统,并且过了有效时间段则失效,主要用于同一个用户在不同的页面中共享信息。 例:建立index.jsp ,session.jsp ,link.jsp next.jsp 验证session的用法。 1 、建立index.jsp以便输入姓名,并传给session存储

姓名:
2、建立session.jsp用来存储从index.jsp中传来的值 <% String name=new String(request.getParameter("name").getBytes("UTF-8"),"GBK"); //把接收到的值映射为myname字段,存数据 session.setAttribute("myname",name); %> 我的名字: <% out.println(name); %> link 3、建立link.jsp用来接收session值,并打印 <% //用于接收并存储字符串变量的值,取数据 String name=(String )session.getAttribute("myname"); %> 我的名字11: <% out.println(name); %> 首页 next 4、建立next.jsp接受session值 <%

使用session实现的计数器

使用session实现真实的计数器 在上一章介绍过一个简单计数器,虽然实现了计数功能,但只要一刷新网页,计数器的数值就增加,反映的访问人数不真实。用户是站点的第5位访问者,怎样刷新网页都应还是第5位,即便是他访问了站点的其他网页,又回到计数器所在的网页,计数器仍然显示是第5位,这才是真实的计数器。本范例就使用session的特性,实现这种真实计数器的功能。 一、范例的演示和代码清单 演示步骤: 1.启动JSP引擎后,启动IE,在地址栏键入http://127.0.0.1:8080/ch3/ch3-31.jsp, 如图3-12所示: 图3-12 2.刷新当前网页,会发现计数器的数值不发生变化,多次刷新数值都不发生变化。 3.这时如果是在局域网上体验范例,再从另外两台计算机访问本机的范例。那两台计 算机会显示是“第2位访客”和“第3位访客”,他们刷新网页,计数器的数值也 不会发生变化。 4.访问范例网页的所有计算机(包括本机),点击“返回”,然后再进入本范例网页, 计数器仍然是原来的数值。(即便是访问多个其他网页后,再进入本范例网页,计 数器也不发生变化。) 5.此时如果在局域网上有一台计算机点击“注销返回”,然后再进入本范例网页,计 算机屏幕上显示是“第4位访客”,其他依次注销,然后再进入本范例网页的计算 机,将是“第5位访客”和“第6位访客”。 6.如果没在局域网上,只在本机上体验范例。每次注销后再进入本范例网页,计数器 将自动加一。 从范例的演示,可以进一步体验到session的魅力和作用。还有一点要说明,session 默认的生命周期是1800秒(30分钟),如果在这个时间内,没有再次使用session,他将自动消失。

php里session的用法

php里session的用法(超级经典) php中session的用法 PHP中的session默认情况下是使用客户端的Cookie。当客户端的Cookie被禁用时,会自动通过Query_String来传递。 Php处理会话的函数一共有11个,我们详细介绍一下将要用到几个函数。 1、session_start 函数功能:开始一个会话或者返回已经存在的会话。 函数原型:boolean session_start(void); 返回值:布尔值 功能说明:这个函数没有参数,且返回值均为true。最好将这个函数置于最先,而且在它之前不能有任何输出,否则会报警,如:Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2) in /usr/local/apache/htdocs/cga/member/1.php on line 3 2、session_register 函数功能:登记一个新的变量为会话变量 函数原型:boolean session_register(string name); 返回值:布尔值。 功能说明:这个函数是在全局变量中增加一个变量到当前的SESSION中,参数name就是想要加入的变量名,成功则返回逻辑值true。可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式来取值或赋值。 3、session_is_registered 函数功能:检查变量是否被登记为会话变量。 函数原型:boobean session_is_registered(string name);

用Session和Cookie两种方法实现购物车

https://www.sodocs.net/doc/b610533351.html,中购物车的两种存储方式Session和Cookie的应用实例收藏 1.这是用Cookie存储的购物车的几种常用的操作: ///

/// 使用Cookie的购物车 /// public class CookieCar { public const string COOKIE_CAR = "Car"; //cookie中的购物车 /// /// 无参数的构造方法 /// public CookieCar() { } /// /// 添加商品到购物车 /// /// /// public void AddProductToCar(string id, string quantity) { string product = id + "," + quantity; //购物车中没有该商品 if (!VerDictCarIsExit(id)) { string oldCar = GetCarInfo(); string newCar = null; if (oldCar != "") { oldCar += "|"; } newCar += oldCar + product; AddCar(newCar); } else { int count = int.Parse(GetProductInfo(id).Split(',')[1].ToString()); UpdateQuantity(id, count + 1); } } /// /// 添加商品的数量 /// /// public void UpdateQuantity(string id, int quantity) { //得到购物车

Session管理和维护

Session管理和维护 asp 5.1.1 Session 对象简介 Session对象其实指的就是用户从到达某个站点直到离开为止的那段时间内,服务器端分配给用户的一个存储信息的全局变量的集合,这些变量可以是自动生成的,也可以是编程者在服务器端脚本定义的。 当用户在应用程序的 Web 页面之间跳转时,存储在Session 对象中的变量将不会丢失,而且在整个用户会话中会一直在下去。 当用户请求 ASP 应用程序的某个页面时,若用户尚未建立 Session 对象,服务器端就会自动创建一个 Session 对象,并指定一个惟一的 Session ID,这个 ID 只允许此Session ID 的拥有者使用,不同的用户的 Session 存储着各自特定的信息,如用户姓名、性别、浏览器类型、显示器分辩率、访问时间等,这将有利于服务器对用户身份的鉴别,从而实现 Web 页面的个性化。 Session 对象有两种结束方法:一种是隐式方法,另一种是显式方法。隐式方法是当用户访问 Web 服务器的时间间隔超过 Session 对象的 TimeOut 属性设置的时间限制时,Session 对象自动结束;显式方法则是利用 Session 对象的 Abadon 方法来中止 Session 。当 Session 结束之后,Session 对象的变量也将被释放,其值不可再用。 session语法: session.集合∣属性∣方法 举例: 学好session加油 <% session("greeting")="ASP“ Response.write(session("greeting")) %>

php使用session的详细介绍

php使用session的详细介绍 对比起Cookie,Session 是存储在服务器端的会话,相对安全,并且不像Cookie 那样有存储长度限制,本文简单介绍Session 的使用。 由于Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改Session 内容。实际上在服务器端的Session 文件,PHP 自动修改Session 文件的权限,只保留了系统读和写权限,而且不能通过ftp 修改,所以安全得多。 对于Cookie 来说,假设我们要验证用户是否登陆,就必须在Cookie 中保存用户名和密码(可能是md5 加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能只做一次验证。为什么呢?因为客户端Cookie 中的信息是有可能被修改的。假如你存储$admin 变量来表示用户是否登陆,$admin 为true 的时候表示登陆,为false 的时候表示未登录,在第一次通过验证后将$admin 等于true 存储在Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为true 的$admin 变量那不是就立即取的了管理权限么?非常的不安全。 而Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改Session 文件的内容,因此我们可以单纯存储一个$admin 变量来判断是否登陆,首次验证通过后设置$admin 值为true,以后判断该值是否为true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。而且可以减少每次为了验证Cookie 而传递密码的不安全性了(Session 验证只需要传递一次,假如你没有使用SSL 安全协议的话)。即使密码进行了md5 加密,也是很容易被截获的。 当然使用Session 还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。我这里就不多说了。 Session 在php.ini 是否需要设置呢?一般不需要的,因为并不是每个人都有修改php.ini 的权限,默认Session 的存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹里,这个稍后我会介绍。 开始介绍如何创建Session。非常简单,真的。 启动Session 会话,并创建一个$admin 变量: // 启动Session session_start(); // 声明一个名为admin 的变量,并赋空值。 $_SESSION["admin"] = null; 如果你使用了Seesion,或者该PHP 文件要调用Session 变量,那么就必须在调用Session 之前启动它,使用session_start() 函数。其它都不需要你设置了,PHP 自动完成Session 文件的创建。 执行完这个程序后,我们可以到系统临时文件夹找到这个Session 文件,一般文件名形如: sess_4c83638b3b0dbf65583181c2f89168ec,后面是32 位编码后的随机字符串。用编辑器打开它,看一下它的内容: admin|N;

session用法-空指针处理

在首页上,如果用户登录了,那么就显示用户管理模块。用户没有登录,就显示用户登录模块。别人提示说判断session是否为空就可以了,但是怎么判断呢?是用if(session==null)吗?但是这样判断一直都不对,所以还是请大家帮个忙。如果大家有其他可用的好办法也请告诉我哦:)谢谢!比价急! 在servlet中,session必须通过request.getSession()创建request.getSession(false)得到当在jsp 中,session是一个隐式对象,访问jsp页面时会自动创建,所以通过session是否为空判断是不行的解决方法:1.将jsp中的session禁用,这样jsp就不会自动创建session,你不通过代码创建的话,session就是空的(这个方法有点...)2.像楼上说的那样,不要通过session是否为空来判断,而是通过session中带的值来做判断(推荐):登陆成功时,在session中放入特定值:session.setAttribute("变量名","值");登陆判断:取值:String str = (String)session.getAttribute("变量名");通过取出的值判断是否已经登陆了注销登陆,移除session中的值:session.removeAttribute("变量名"); 是如果他登录了,你就给他一个特定的session,比如session("ID"),那么,才可以判断。因为只要他上你的网站了,就算你没给他session,系统也会给他一个session的,所以,那样子去判断是不行的。 JSP我不会,我用的是ASP,我给你写个ASP的你参考下吧: 在判断登录是否成功的那个程序里,如果用户登录成功,则写下面这句: Session("ID")=rs("ID") 注:rs("ID")就是用户的ID。你也可以给其它值,只要是非空的值就行了。 然后,你可以在任何页面请求这个session。如果请求不到,那他就肯定没有登录了。ASP中是这样实现的: If Session("ID")="" Then Response.Write "你还没有登录!" End If …… <% String username=(String)session.getAttribute("username"); String userrole=(String)session.getAttribute("userrole"); ……

Session使用详解(有实例)

Session详解 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可以看到这样的话“在一个浏览器会话期间,……”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差别只能靠上下文来推断②。 然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者“一个POP3 session”③。 而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session 里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言

相关主题