制作一个云盘网站

简介

这学期的大作业是用ASP开发一个网站,于是有了这篇博客。但是这里只记录遇到的问题及解决方法,并非流程。

表单验证

表单验证可以前端验证也可以后端验证,各有特点,前端速度快,但是功能简单,后端可以很强大,却开销大,所以采用二者结合的方式。判断是否为空、是否合法等用js验证,需要查询数据库的再用C#验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script type="text/javascript">
function login()
{
var name = document.getElementById("login_name");
var password = document.getElementById("login_password");
var isSuccess = 1;
if (name.value.length == 0)
{
alert('用户名为空');
isSuccess = 0;
}
else if (password.value.length == 0)
{
alert('密码为空');
isSuccess = 0;
}
if (isSuccess == 1)
return true;
return false;
}
</script>
<form action="handler.ashx" method="post" onsubmit="return login()">
</form>

上面的例子中,提交表单后,会先执行login()这个函数,通过了这个js验证后,才会向服务器发送请求,剩下的验证在那里处理即可。

js和C#使用Cookie传值

js端设置Cookie:

1
2
3
4
5
6
7
8
9
10
11
12
function login() {
var password = document.getElementById("password");
var username = document.getElementById("username");
if (password.value.length != 0) {
document.cookie = "password=" + password.value;
//用户名可能出现中文,需要编码处理
document.cookie = "username=" + escape(username.innerHTML);
return true;
}
alert("用户名或密码为空");
return false;
}

C#获取Cookie:

1
2
3
password = Request.Cookies["password"].Value.ToString();
username = HttpUtility.UrlDecode(Request.Cookies["username"].Value.ToString());
//用户名名可能存在中文,js转码后这里进行解码

ashx中使用Session以及判断Session是否为空

ashx中使用Session需要添加using指令以及该类需要继承IRequiresSessionState:

1
2
3
using System.Web.SessionState;
public class Share : IHttpHandler, IRequiresSessionState{
}

判断Session是否为空,不能在使用toString()后再判断,这样也会报错,需要一开始就判断。

1
2
3
if (context.Session["username"] == null)
{
}

上传及下载大文件

我这次投机取巧使用的是a链接的方式,所以下面这个没有试过,暂且记录下来。
web.confg配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<!--设置上传文件最大长度-->
<httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="36000" delayNotificationTimeout="36000"/>
</system.web>
<system.webServer>
<security>
    <requestFiltering>
      <!--设置上传文件最大长度-->
      <requestLimits maxAllowedContentLength="2147483648"/>
</requestFiltering>   
</security>
</system.webServer>
</configuration>