当前位置: 首页 > 编程日记 > 正文

ASP.net session 使用总结(2)

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录的话用户名又是多少。

我们知 道,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。那么,ASP.NET 2.0提供了哪些存储SessionID的模式呢:

·      Cookie(默认)。如果客户端禁止了Cookie的使用,Session也将失效。

·      URL。Cookie是否开启不影响Session使用,缺点是不能再使用绝对链接了。

前面说了SessionID可以存储在客户端的Cookie或者URL中,那么Session真正的内容存储在哪里呢?ASP.NET 2.0对于Session内容的存储也提供了多种模式。

·      InProc(默认)。Session存储在IIS进程中(Web服务器内存)。

·      StateServer。Session存储在独立的Windows服务进程中(可以不是Web服务器)。

·      SqlServer。Session存储在SqlServer数据库的表中(SqlServer服务器)。

虽然 InProc模式的Session直接存储在Web服务器IIS进程中,速度比较快,但是每次重新启动IIS都会导致Session丢失。利用后两种模式,我们就完全可以把Session从Web服务器中独立出来,从而减轻Web服务器的压力,同时减少Session丢失的概率。

因此,SessionID存储在客户端(可以是Cookie或者URL),其他都存储在服务端(可以是IIS进程、独立的Windows服务进程或者SQL Server数据库中)。

12.3.2  Session的使用

让我们先来实践一下如何使用Session,进而回答第二个问题:Session存储的类型限制。Session不需要进行任何配置就可以使用(默认是InProc模式并且依赖Cookie)。首先,在页面上建立两个按钮。

<asp:Button ID="btn_WriteSession" runat="server"Text="写入Session" />

<asp:Button ID="btn_ReadSession" runat="server" Text="读取Session" />

在btn_WriteSession按钮的Click事件处理方法中,写入两个Session,一个是简单的字符串,另外一个是自定义的类。

protected void btn_WriteSession_Click(object sender, EventArgs e)

{

Session["SimpleString"] = "编程快乐";

MyUser user = new MyUser();

user.sUserName = "小朱";

user.iAage = 24;

Session["CustomClass"] = user;

}

Session的使用非常简单,直接对某个Key的Session进行赋值即可。自定义类MyUser如下:

class MyUser

{

public string sUserName;

public int iAage;

public override string ToString()

{

return string.Format("姓名:{0},年龄:{1}", sUserName, iAage);

}

}

在这里,我们覆写了ToString()方法直接返回实例的一些信息。然后,双击btn_ReadSession按钮来实现从Session中读取数据的代码:

protected void btn_ReadSession_Click(object sender, EventArgs e)

{

if (Session["SimpleString"]==null)

{

Response.Write("读取简单字符串失败<br/>");

}

else

{

string s=Session["SimpleString"].ToString();

Response.Write(s + "<br/>");

}

if (Session["CustomClass"]==null)

{

Response.Write("读取简单自定义类失败<br/>");

}

else

{

MyUser user=Session["CustomClass"] as MyUser;

Response.Write(user.ToString()+"<br/>");

}

}

在每次读取Session的值以前请务必先判断Session是否为空,否则很有可能出现“未将对象引用设置到对象的实例”的异常。我们看到,从Session 中读出的数据都是object类型的,我们需要进行类型转化后才能使用。打开页面,先单击写入Session按钮,再单击读取Session按钮,页面输出如    图12-1所示。

12.3.3  把Session存储在独立的进程中

由此看来,Session能存储任意对象,是这样吗?现在得出这个结论还太早了一点,因为我们并没有实践过StateServer和SqlServer模式的Session。要把Session存储在Windows服务进程中需要进行以下几个步骤。

n  第1步是打开状态服务。依次打开“控制面板”→“管理工具”→“服务”命令,找到ASP.NET状态服务一项,右键单击服务选择启动,如图12-2所示。

图12-2  启动ASP.NET状态服务

n  如果你正式决定使用状态服务存储Session前,别忘记修改服务为自启动(在操作系统重启后服务能自己启动)以免忘记启动服务而造成网站Session不能使用,如图12-3所示,双击服务把服务的启动类型设置为自动。

图12-3  修改服务启动类型为自动

服务正常启动后可以观察任务管理器的进程页,其中的aspnet_state.exe进程就是状态服务进程,如图12-4所示。

图12-4  观察任务管理器的进程页

n  第2步,在system.web节点中加入:

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"

stateNetworkTimeout="20"></sessionState>

n  stateConnectionString表示状态服务器的通信地址(IP:服务端口号)。由于我们现在在本机进行测试,这里设置成本机地址127.0.0.1。状态服务默认的监听端口为42422。当然,您也可以通过修改注册表来修改状态服务的端口号。

n  1.在运行中输入regedit启动注册表编辑器。

n  2.依次打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters节点,双击Port选项,如图12-5所示。

选择基数为十进制,然后输入一个端口号即可。stateNetworkTimeout属性表示从状态服务器请求Session数据最长的时间,默认为10秒,如果网络连接不是很好,请把这个数字适当设置得大一点。

n  第3步打开页面,单击“写入Session”按钮,系统会报错,如图12-6所示。

   

图12-5  修改状态服务端口号            图12-6  向StateServer默认的Session中写入自定义类出错

提示已经说得很清楚了,只有把对象标注为可序列化后才能在服务中进行存储。什么是序列化呢?序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。要使一个类可序列化,最简单的方法是使用 Serializable 属性对它进行标记。

[Serializable]

class MyUser

{

public string sUserName;

public int iAage;

public override string ToString()

{

return string.Format("姓名:{0},年龄:{1}", sUserName, iAage);

}

}

n  第4步现在重新打开页面进行测试,得到的结果和使用InProc模式是一样的。

12.3.4  把Session存储在数据库中

要把Session存储在SqlServer中,基本上也是这么几个步骤。

n  1.在命令行窗口输入cmd并在命令行中运行如下命令。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -S .\SqlExpress -E –ssadd

其中 C:\Windows用你自己Windows的目录代替,v2.0.50727用你安装的2.0框架的版本号代替。-S指定SqlServer服务器地址,-E表示采用信任连接,-ssadd表示为SqlServer服务器添加状态服务的支持。操作结束后,你可以使用IDE的服务器资源管理器连接 SqlExpress数据库,可以看到多了一个ASPState数据库,但是奇怪的是数据库中没有任何表却有很多存储过程,如图12-7所示。

其实,所有Session的数据都存放在了tempdb数据库内,如图12-8所示。

           

图12-7  使用服务器资源管理器浏览ASPState数据库      图12-8  存放Session数据的tempdb数据库

其实,aspnet_regsql.exe有一个-sstype参数可以用来指定Session的内容和操作的存储过程存放的表。由于篇幅关系,在这里就不详细介绍了,读者可以使用aspnet_regsql.exe/?来浏览程序详细的使用方式。

n  2.打开Web.config文件,修改前面建立的sessionState节点。

<sessionState mode="SQLServer" sqlConnectionString="server=(local)\SQLEXPRESS;

Trusted_Connection=True" sqlCommandTimeout="60"></sessionState>

为sqlConnectionString 属性指定以前一直用的连接字符串,唯一不同的是不需要再指定数据表的名字了。sqlCommandTimeout属性表示允许执行Sql命令最长的时间,默认为30秒,可以根据自己的需要适当调整这个数字。最后,重新打开页面进行测试,得到的结果和使用InProc模式是一样的(同样你需要确保在自定义类前标注了[Serializable]),不过我们能感到速度有些慢了,毕竟数据是从数据库中进行读取或保存的,而且在使用前还需要经过序列化和反序列化操作。

因此Session能存储的类型为: 对于InProc模式是一切类型,而对于StateServer和SqlServer模式是一切可以序列化的类型。

12.3.5  Session的使用范围与大小限制

那么, 会话状态使用的范围和大小限制又是怎么样的呢?我们可以分析一下图12-8,系统使用两个表来存储Session的状态。其中有一个 ASPStateTempApplication表,用来存储Session所在的应用程序,一定程度上反映了Session是不能跨应用程序的。举例来说,我们在计算机上建立了两个网站,同时都使用Session[“UserName”]来保存登录的用户名,一个网站的用户登录后,另一个网站直接访问 Session[“UserName”]是取不到任何值的。那么,Session是否可以跨用户呢?通过前面的分析我们知道,肯定是不行的, Session通过SessionID来区分用户,一般来说SessionID是不可能出现重复的现象,也就是说Session一般是不会“串号”的。既然页面每次提交的时候都会附加上当前用户的SessionID,那么Session应该是可以跨页面的,也就是说一个网站中所有的页面都使用同一份 Session。你可以自己来做个试验,请读者打开刚才那个页面,然后按Ctrl+N组合键再打开第二个同样的页面,单击第一个页面中的“写入 Session”按钮,单击第二个页面中的“读取Session”按钮,可以发现Session的值被正确读出了。第三个问题的答案有了。

·      Session状态使用的范围:使用同一个客户端(浏览器实例)访问同一个应用程序的所有页面。

我们再来做一个试验,看看Session的容量有多大,在测试以前请修改Web.config,把Session设置为StateServer模式。然后,把写入Session的代码修改成如下(别忘记using System.Data.SqlCient):

DataSet ds = new DataSet();

using (SqlConnection conn = new SqlConnection(@"server=(local)\SQLEXPRESS;database=Forum;

Trusted_Connection=True"))

{

SqlDataAdapter da = new SqlDataAdapter("select * from tbUser;select * from tbBoard;

select * from tbTopic;", conn);

da.Fill(ds);

}

ArrayList al = new ArrayList();

for(int i = 0;i<10000000;i++)

al.Add(ds);

Session["LargeData"] = al;

我们把包含三个表的DataSet重复加入ArrayList中1000万次。由于这些表几乎每个表只有几条记录,这样可以模拟大数据量的情况。启动页面,单击“写入Session”按钮后可以发现,Windows服务进程一下子占用了多达70MB的内存,如图12-9所示。

图12-9  把大量数据存放到Session中

Session 对于网站和用户是独立的,试想一下,如果服务器上有两个网站,每个网站的在线人数是100人,那么占用内存就要14G。是不是很恐怖的数字?因此,虽然 Session的大小没有限制,但是我们千万不能滥用Session。笔者推荐你在Session中存储少于100K的数据。

·      如果你使用InProc模式的Session,存储过多的数据会导致IIS进程被回收,引发Session不断丢失。

·      如果你使用StateServer存储Session,那么数据在存入Session以前需要进行序列化,序列化会消耗大量的CPU资源。

·      如果你使用SqlServer模式的Session,数据不但要序列化而且还是存储在磁盘上,更不适合存储大量数据。

12.3.6  Session的生命周期

在了解了Session中存储的数据无大小限制后,我们可能要更多地关心Session的生命周期了。我们已经知道,Session是在用户第一次访问网站的时候创建的,那么Session是什么时候销毁的呢?Session使用一种平滑超时的技术来控制何时销毁Session。默认情况下,Session 的超时时间(Timeout)是20分钟,用户保持连续20分钟不访问网站,则Session被收回,如果在这20分钟内用户又访问了一次页面,那么20 分钟就重新计时了,也就是说,这个超时是连续不访问的超时时间,而不是第一次访问后20分钟必过时。这个超时时间同样也可以通过调整Web.config 文件进行修改:

<sessionState timeout="30"></sessionState>

当然你也可以在程序中进行设置:

Session.Timeout = "30";

一旦Session超时,Session中的数据将被回收,如果再使用Session系统,将给你分配一个新的SessionID。本节一开始我们就介绍了可以在URL中存储SessionID,现在请你配置Web.config文件,设置Session超时时间为1分钟,SessionID在URl中存放。打开页面后单击“写入Session”按钮,过1分钟再次单击按钮并观察SessionID是否变化。

<sessionState timeout="1" cookieless="true"></sessionState>

如图12-10所示,SessionID的确发生了变化。

图12-10  超时后SessionID发生变化

不过,你可别太相信Session的Timeout属性,如果你把它设置为24小时,则很难相信24小时之后用户的Session还在。Session是否存在,不仅仅依赖于Timeout属性,以下的情况都可能引起Session丢失(所谓丢失就是在超时以前原来的Session无效)。

·      bin目录中的文件被改写。asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致 Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失。

·      SessionID丢失或者无效。如果你在URL中存储SessionID,但是使用了绝对地址重定向网站导致URL中的SessionID丢失,那么原来的Session将失效。如果你在Cookie中存储SessionID,那么客户端禁用Cookie或者Cookie达到了IE中Cookie数量的限制(每个域20个),那么Session将无效。

·      如果使用InProc的Session,那么IIS重启将会丢失Session。同理,如果使用StateServer的Session,服务器重新启动Session也会丢失。

一般来说,如果在IIS中存储Session而且Session的Timeout设置得比较长,再加上Session中存储大量的数据,非常容易发生Session丢失的问题。

最后, Session的安全性怎么样呢?我们知道,Session中只有SessionID是存储在客户端的,并且在页面每次提交的过程中加入HTTP头发送给服务器。SessionID只是一个识别符,没有任何内容,真正的内容是存储在服务器上的。总的来说安全性还是可以的,不过笔者建议你不要使用 cookieless和SqlServer模式的Session。把SessionID暴露在URL中,把内容存储在数据库中可能会发生攻击隐患。

12.3.7  遍历与销毁Session

Session虽然很方便,但是要用好Session还需要自己不断实践,根据自己网站的特点灵活使用各种模式的Session。关于使用程序访问Session,笔者还想补充两点。

·      如何遍历当前的Session集合。

System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator();

while (SessionEnum.MoveNext())

{

Response.Write(Session[SessionEnum.Current.ToString()].ToString() + "<br/>");

}

对于我们这个例子,输出和图12-1一样。如果你仅仅为了监视Session,也可以通过trace来获得详细信息。在Web.config的system.Web节点中添加:

<trace enabled="true"  pageOutput="true"/>

打开页面后单击“写入Session”按钮,页面显示如图12-11所示。

图12-11  使用trace观察会话状态

·      如何立刻让Session失效。比如用户退出系统后,Session中保存的所有数据全部失效,可以使用以下代码来让Session失效。

Session.Abandon();

12.3.8  Session的常见问题与总结

Session的基本知识就介绍到这里,现在再回头看第一节中的几个问题,你是否都能回答了呢?为了强化大家的概念,笔者就三种模式的Session进行了一个比较(假设都使用Cookie来存储SessionID)。

表12.1  三种模式的Session比较

InProc

StateServer

SQLServer

存储物理位置

IIS进程(内存)

Windows服务进程(内存)

SQLServer数据库(磁盘)

存储类型限制

无限制

可以序列化的类型

可以序列化的类型

存储大小限制

无限制

使用范围

当前请求上下文,对于每个用户独立

生命周期

第一次访问网站的时候创建Session超时后销毁

优点

性能比较高

Session不依赖Web服务器,不容易丢失

缺点

容易丢失

序列化与反序列化消耗CPU资源

序列化与反序列化消耗CPU资源,从磁盘读取Session比较慢

使用原则

不要存放大量数据

在使用Session的过程中你可能还会遇到很多奇怪的问题,结束本节之前笔者列出了几条常见的FAQ,供大家参考:

·      为什么每次请求的SessionID都不相同?

n  可能是没有在Session里面保存任何信息引起的,即程序中任何地方都没有使用Session。只有在Session中保存了内容后,Session才会和浏览器进行关联,此时的SessionID将不会再变化。

·      为什么当我设置cookieless为true后,在重定向的时候会丢失Session?

n  当使用cookieless时,你必须使用相对路径替换程序中的绝对路径,如果使用绝对路径,ASP.NET将无法在URL中保存SessionID。

·      有办法知道应用程序的Session在运行时占用了多少内存吗?

n  没有办法,你可以通过观察IIS进程(InProc模式)或者aspnet_state进程(StateServer模式)大致估计。

·      有没有可能知道整个网站使用Session的用户列表?

n  对于InProc模式和StateServer模式很难,对于SqlServer模式你可以查询存储Session的表进行尝试。

·      当页面中设了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么?

n  原因是你的frameset是放在一个HTML页面上而不是ASPX页面。在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。然而如果你使用HTML页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器上返回时并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样,这些页面都会产生自己的SessionID,所以在这种情况下就可能出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID。

转载于:https://www.cnblogs.com/ivangao/archive/2009/07/01/1514818.html

相关文章:

python re模块_Python re模块

正则表达式元字符说明. 匹配除换行符以外的任意字符^ 匹配字符串的开始$ 匹配字符串的结束[] 用来匹配一个指定的字符类别? 对于前一个字符字符重复0次到1次* 对于前一个字符重复0次到无穷次{} 对于前一个字符重复m次{m,n} 对前一个字符重复为m到n次\d 匹配数字&#xff0c;相…

国外优秀开源PHP建站程序一览

大量的PHP开源&#xff08;开放源代码/Open Source&#xff09;应用改变了这个世界&#xff0c;改变了互联网&#xff0c;以下我们总结从数据库到购物、博客等众多类型的开源PHP软件&#xff0c;供网站开发者们参考。 博客&#xff1a;WordPress WordPress是使用PHP开发的著名博…

《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.1 引言...

本节书摘来自华章计算机《数据科学R语言实践&#xff1a;面向计算推理与问题求解的案例研究法》一书中的第2章&#xff0c;第2.1节,作者&#xff1a;[美] 德博拉诺兰&#xff08;Deborah Nolan&#xff09;  邓肯坦普朗&#xff08;Duncan Temple Lang&#xff09;  更多章…

Matlab数据的可视化 -- 三维特殊图形

本篇微信图文主要介绍Matlab数据可视化方面的内容。plot3&#xff0c;bar3&#xff0c;barh3&#xff0c;scatter3

baidumap api MySQL_百度地图API开发笔记一(基础篇)

什么是百度地图API&#xff1f;百度地图API是一套由JavaScript语言编写的应用程序接口&#xff0c;它能够帮助您在网站中构建功能丰富、交互性强的地图应用。百度地图API包含了构建地图基本功能的各种接口&#xff0c;提供了诸如本地搜索、路线规划等数据服务。测试js API代码(…

Matlab数据的可视化 -- 三维网格图形

本篇微信图文主要介绍Matlab数据可视化方面的内容。mesh&#xff0c;meshc&#xff0c;meshz

我国网络安全人才培养缺口巨大

近日在武汉举行的国家网络安全宣传周的相关论坛上&#xff0c;我国网络安全人才培养缺口巨大成为与会专家热议的话题。来自中央和地方相关部门、高校研究者、互联网企业代表均认为&#xff0c;我国网络安全人才输出仍距国家、企业需求有较大差距。 去年&#xff16;月&#xff…

如何写网站的robots.txt和meta name robots的配置

robots.txt基本介绍robots.txt是一个纯文本文件&#xff0c;在这个文件中网站管理者可以声明该网站中不想被robots访问的部分&#xff0c;或者指定搜索引擎只收录指定的内容。当一个搜索机器人&#xff08;有的叫搜索蜘蛛&#xff09;访问一个站点时&#xff0c;它会首先检查该…

mysql innodb_data_file_path_关于innodb_data_file_path设置

关于innodb_data_file_path设置启动Mysql时报错&#xff0c;无法正常启动&#xff0c;通过日志发有数据文件大小错误&#xff0c;日志如下截图&#xff1a;[ERROR] InnoDB: auto-extending data file /usr/local/mysql/data/ibdata1 is of a different size 768 pages (rounded…

BM提供支持云的量子计算平台,以加速创新

IBM研究院日前首次宣布公众可试用IBM量子处理器。从5月4日开始&#xff0c;IBM通过云服务&#xff0c;使所有有兴趣亲自实践的人们可以接触到量子处理器&#xff0c;帮助科学家和科研社区加速科技创新&#xff0c;并在该领域激发出更多的前沿应用。 这仅仅是量子计算时代的开始…

Matlab数据的可视化 -- 图形格式的设置

本篇微信图文主要介绍Matlab数据可视化方面的内容。title、x&#xff0c;y&#xff0c;zlabel、legend、title、axis、text等

(转)koogra--Excel文件读取利器

koogra是一个.net平台下开源的excel读取程序&#xff0c;可以在开源社区下载它。使用它我们无需office就可以读取excel文件。尽管这个程序已经停止了更新&#xff0c;但是它还是很好用的。下面介绍怎么使用它。下载到该程序的源代码&#xff0c;编译生成Net.SourceForge.Koogra…

mysql切换系统盘命令_mysql常用命令

一、连接MySQL格式&#xff1a; mysql -h主机地址 -u用户名 &#xff0d;p用户密码1、例1&#xff1a;连接到本机上的MYSQL。首先在打开DOS窗口&#xff0c;然后进入目录 mysqlbin&#xff0c;再键入命令mysql -uroot -p&#xff0c;回车后提示你输密码&#xff0c;如果刚安装好…

Matlab数据的可视化 -- 视角与色彩控制

本篇微信图文主要介绍Matlab数据可视化方面的内容。view&#xff0c;colormap

大数据、智慧城市成生态贵州新名片

2016年中国贵州内陆开放型经济试验区跨境投资贸易洽谈会将于11月10日在贵安新区正式开幕。据主办方介绍&#xff0c;此次洽谈会邀请了来自美国、澳大利亚等24个国家和地区的100多家境外企业&#xff0c;以及1000多家国内企业参加&#xff0c;预计签约总金额或超过1400亿元。 9日…

提升网络安全 十大策略全面巩固企业内网

几乎所有企业对于网络安全的重视程度一下子提高了&#xff0c;纷纷采购防火墙等设备希望堵住来自Internet的不安全因素。然而&#xff0c;Intranet内部的攻击和入侵却依然猖狂。事实证明&#xff0c;公司内部的不安全因素远比外部的危害更恐怖。 大多企业重视提高企业网的边界安…

oracle mysql事物隔离级别_Oracle数据库事物隔离级别

事务隔离级别&#xff1a;一个事务对数据库的修改与并行的另一个事务的隔离程度。两个并发事务同时访问数据库表相同的行时&#xff0c;可能存在以下三个问题&#xff1a;1、幻想读&#xff1a;事务T1读取一条指定where条件的语句&#xff0c;返回结果集。此时事务T2插入一行新…

Matlab数据的可视化 -- 柱形立体图

本篇微信图文主要介绍Matlab数据可视化方面的内容。cylinder

中国大陆光伏中上游触底反弹 台湾省亦酝酿涨势

太阳能需求在中国十一长假前回温&#xff0c;厂商受限于人力的调配&#xff0c;难以立即将稼动率全开&#xff0c;使得短期供给无法立即上升以呼应需求&#xff0c;因而中国大陆市场从多晶硅至电池片价格出现短暂触底反弹的情形&#xff0c;台湾省厂商也正酝酿涨价动能。 多晶硅…

js版的box2D

http://sourceforge.net/projects/box2d-js/files/ 受不了了 转载于:https://www.cnblogs.com/vilyLei/articles/1522800.html

mysql 安装 se_mysql的安装过程

(1)下载mysql。(2)解压文件到特定位置。我解压到&#xff1a;/home/jim/Software(3)创建Mysql组和用户。mysql中的一个用户名就是链接mysql服务器时指定的用户名&#xff0c;该名字不必与linux登陆名联系起来&#xff0c;但是必须是linux系统下建立的用户。命令为&#xff1a;g…

创新类编辑推荐:Sequence iBPMS平台

创新类编辑推荐是Sequence&#xff0c;一个“iBPMS”工作流管理平台。本文介绍了该产品以及用户是如何成功使用该平台的。 SearchSOA的编辑会定期为创新性和市场影响而表彰应用集成和现代化技术。PNMsoft的Sequence iBPMS是2016年4月份的编辑推荐。 产品名称&#xff1a; Seque…

Matlab数据的可视化 -- 简易表面图

本篇微信图文主要介绍Matlab数据可视化方面的内容。ezsurf

PL/SQL学习笔记-常量变量及数据类型初步

一&#xff1a;常量和变量 开始之前&#xff0c;还是照例做个经典的例子&#xff0c;如下&#xff1a; declare mydate varchar2(16) : hellow world; begindbms_output.put_line(mydate); end; declare是声明部分我在这个部分声明了varchar2类型的变量&#xff0c;名字叫myda…

python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式

1. 前言邮件&#xff0c;作为最正式规范的沟通方式&#xff0c;在日常办公过程中经常被用到我们都知道 Python内置了对 SMTP 的支持&#xff0c;可以发送纯文本、富文本、HTML 等格式的邮件本文将聊聊利用 Python 发送邮件的 3 种方式2. 准备以 126 邮箱为例&#xff0c;在编码…

数据库与操作系统时区更改

ORACLE 11G 新部署的环境&#xff0c;刚使用GOLDENGATE 进行完数据迁移和同步&#xff0c;发现ORACLE 自动收集的任务时间  并不是设定的晚上22点启动。检查AIX 时区发现设置的CDT &#xff0c;数据库的TIMEZONE 是CST6CDT&#xff0c;与系统管理  员沟通&#xff0c;他答复…

Matlab数据的可视化 -- 三维表面图

本篇微信图文主要介绍Matlab数据可视化方面的内容。surf

为自定义控件添加页面响应事件

ascx:<asp:Button ID"Button1" runat"server" Text"Button" OnClick"Button1_Click" />ascx.cs:(1)public delegate void PostBackDelegate(); //定义委托类型public event PostBackDelegate PostBackEvent; //定义委托对象pr…

trogan连接不上_解决连接不上网(Connection not connected).doc

解决连接不上网(Connection not connected).doc解决连接不上网(Connection not connected)The computer doesnt connect to broadband and has a large collection of code problemsSome broadband connection error handlingBroadband connection error 691 (denied access du…

ASP.NET 3.5揭秘-读书笔记1

ASP.NET和.NET FrameworkASP.NET是微软.NET Framework的一部分。.NET Framework由两部分组成&#xff1a;框架类库(Framework Class Library)和公共语言运行库。框架类库&#xff1a;实现了各种各样功能的类的集合,使编程更简单。命名空间程序集(Assembly): 类在硬盘上的表现—…