会话状态在在线考试系统中的应用

时间:2022-06-17 04:45:58

会话状态在在线考试系统中的应用

摘要:为适应“互联网+”教育快速发展的新常态,该校进行了在线考试系统的开发和研究。该文介绍了各种页面状态管理技术的利弊,并结合该校实际阐述了会话状态在在线考试系统开发中的实现和作用。

关键词:在线考试系统;页面状态管理技术;会话状态

中图分类号:TP311 文献标识码:A文章编号:1009-3044(2016)14-0048-03

Session State in Online Examination System

LI Zhan-fei

(Medicine College of Shaoguan University, Shaoguan 512026, China)

Abstract: To adapt to the rapid development of the new normal Internet plus "education, our school has carried on the research and development of online examination system. This paper introduces the advantages and disadvantages of various page status management technology, and elaborate the session state in the online examination system in combination with the actual situation of our school.

Key words: the online examination system; page status management technology; session state

为适应信息快速发展的新常态,基于“互联网+”的教育领域也随着发生了日新月异的变化。为了使考试更加的公正、客观、有效率和节能环保,实现无纸化考试,我校也于近期对该项目进行了立项研究。在开发在校考试系统的过程中,我们用到了页面状态管理技术,那么在开发中为什么要用到页面状态管理呢?我们都知道开发的Web网站、Web应用程序都是要跟Http协议打交道的,而Http协议是无状态的,页面需要什么,都是通过请求链接响应断开这样的一个过程,断开之后服务器就不记得上一次到底给了浏览器什么?如果要想让浏览器回想起上次给了浏览器什么,那么页面在下一次请求之时就必须带上上一次的一些相关的信息,让服务器回想起来,服务器再根据这些相关的信息就能还原上一次的状态了,那么根据保存这些维持状态的相关信息的位置可以把状态管理分为基于客户端页面状态管理和基于服务器端页面状态管理[1]。

1 基于客户端页面状态管理

基于客户端的状态管理主要包括隐藏域、视图状态(ViewState)、查询字符串和Cookie等,有时候在开发的过程中,为了实现一些轻量级的数据处理,经常使用一些隐藏控件来做数据的容器,在隐藏域中保存数据即对value属性赋值,其value属性只能储存一些简单的字符串,并且用户可以通过查询源代码的形式查看其相关的value值。视图状态(ViewState)主要是用来存放和视图相关的一些状态,是基于单个页面的状态管理方法,它把需要保留的页面状态数据和控件值在回发的过程中序列化成Base64编码,并输出到视图状态的隐藏字段中,并在回发后在当前页面将其恢复的一种方法。ViewState也不能保存太多的数据,否则页面就很难打开了。查询字符串是开发者为了在页面之间保持页面状态信息传递,自行将一些简单的字符串放于URL中,实现从当前页到目标页的信息传递。Cookie是服务器生成的一组数据,由服务器发给客户浏览器,客户浏览器把它保存在本地的磁盘某个目录文件中。

上面这几种方法在数据传输往返过程中,数据信息不会保存在服务器中,主要保存在Web页面和客户电脑中。

2 基于服务器端页面状态管理

基于服务器端的状态管理主要包括会话状态(session)、应用程序状态(Application)、数据库技术和Cache等,会话状态是一个跨页面保持状态的最佳方法,它可以在一个页面保存信息,而在另一个页面使用,而且可以实现复杂数据的传输。应用程序状态(Application)是一个全局对象,可以被所有客户端访问,它的语法跟Session相似。数据库技术就是把要访问的数据信息保存到数据库中,Web页面要读取和存储状态都需要访问数据库,这种技术有利于需要长期维持信息状态或者即使服务器重启仍需要保留状态的开发中。Cache也就是我们经常说的缓存,它的使用方法和application一样,也是整个应用程序共用一份的,由于缓存的读取速度快,所以我们经常把一些查询次数多但改动又不大的数据放在cache中。

3 考试页面状态保持的实现

无论是基于客户端还是基于服务器端的状态管理方法,每一种方法都有自己的优缺点,比如基于客户端的状态管理,因为把数据放在客户端就会存在数据不安全,容易被篡改的风险,而且客户端的传输数据类型,大小也要受到限制;基于服务器端的状态管理,实现了数据安全的同时也加大了服务器的负担,使用结束之后要尽量清除,否则大量的使用将会导致服务器的瘫痪。综合分析, 现结合我院实际,就在线考试系统的多选会话状态实现过程作简要介绍[2]。

3.1 ASPX页面布局

为了防止考生在考试的过程中作弊,所以在aspx页面放置了一个GridView控件,其相关的控件属性设置如下:,并在GridView控件里面用table根据自己的需要进行布局,内置一个CheckBoxList,其ID="CheckBoxList1",并把对应的数据库字段绑定到对应的表格里面[3]

3.2 CS页面代码实现

在CS页面通过自写的SqlHelper链接数据库进行GridView控件绑定,实现代码如下:

protected void Page_Load(object sender, EventArgs e)

{

if(!IsPostBack)

{

Bind();

}

}

private void Bind()

{

DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Answer");

gridview.DataSource = dt;

gridview.DataBind();

}

当点击GridView分页功能进行翻页时,将触发gridview_PageIndexChanging事件,在事件里面实现了二个方法,RecordCurrentState()记录原来分页面的所有CheckboxList的选中状态,

ResetBeforeState()还原当前选中页面的CheckboxList的状态,事件gridview_PageIndexChanging的代码如下:

Protectedvoidgridview_PageIndexChanging(objectsender,GridViewPageEventArgse)

{

//记录原来分页面的所有CheckboxList的状态

RecordCurrentState();

gridview.PageIndex = e.NewPageIndex;

Bind();

//重构当前选中页面的CheckboxList的状态

ResetBeforeState();

}

RecordCurrentState()记录原来分页状态的代码如下:

//CheckBoxList记录下翻页之前的状态

private void RecordCurrentState()

{

Dictionary dic = new Dictionary();

for (int i = 0; i < gridview.Rows.Count; i++)

{

string index = gridview.DataKeys[i].Value.ToString();

CheckBoxList rblist = gridview.Rows[i].Cells[0].FindControl("CheckBoxList1") as CheckBoxList;

string matter = "";

for (int j = 0; j < rblist.Items.Count; j++)

{

if (rblist.Items[j].Selected)

{

matter = (matter + rblist.Items[j].Value.ToString() + "、").Trim();

}

}

if (Session["AnswerResult"] != null)

{

dic = (Dictionary)Session["AnswerResult"];

if (dic.ContainsKey(index))

{

dic.Remove(index);

}

}

dic.Add(index, matter);

Session["AnswerResult"] = dic;

}

}

ResetBeforeState()还原当前选中页面状态的代码如下:

//CheckBoxList还原以前的状态

private void ResetBeforeState()

{

Dictionary dictionary = (Dictionary)Session["AnswerResult"];

for (int i = 0; i < gridview.Rows.Count; i++)

{

string index = gridview.DataKeys[i].Value.ToString();

if (dictionary.Keys.Contains(index))

{

CheckBoxList rblist = gridview.Rows[i].Cells[0].FindControl("CheckBoxList1") as CheckBoxList;

string str = dictionary[index].TrimEnd('、'); //去掉最后一个顿号

int length = str.Split('、').Length;

for (int k = 0; k < length; k++)//给CheckBoxList选中的复选框 赋值

{

for (int j = 0; j < rblist.Items.Count; j++)

{

string result = str.Split('、')[k];

if (result == rblist.Items[j].Value)

{

rblist.Items[j].Selected = true;

}

}

}

}

}

}

4 结束语

要保证在线考试系统的顺畅运行,保存考生在提交考卷前的答案,同时使考生能在检查中随时修改部分题目答案又不影响其他已做题目的答案,页面状态管理技术起着非常重要的作用。页面状态管理技术根据保存路径不同分为两种,即基于客户端页面状态管理和基于服务器端页面状态管理,两者各有利弊,互辅互成,我们在进行在线考试系统开发中,根据实际情况选择适合的页面状态管理技术,最大限度地保证了在线考试系统的顺畅运行和安全运行。

参考文献:

[1] 张静. 浅谈中页面状态管理方法[J].无线互联科技. 2015(17):38-39.

[2] 马伟. 4 权威指南[M]. 北京: 机械工业出版社, 2010.

[3] 郭文波. GridView控件的高级数据绑定与应用[J].电脑编程技巧与维护, 2012(7):54-58.

上一篇:我把王子变成了青蛙 下一篇:第一名媛的繁华人生因顾维钧落败