使用AJAX在用户登录时运行操作

时间:2013-09-14 16:49:07

标签: c# ajax web-services jquery

我目前正在为使用C#.NET作为后端的网站编写消息传递系统。

消息系统与Facebook的网络界面非常相似,它允许您与其他人“聊天”,通过AJAX发送消息。

我创建了一个处理实际发送消息位的Web服务(C#)。我正在使用JQuery使用以下代码激活该服务:

// generic webservice used to retrieve count from db
function SendMessageAJAX(taskID, sendeeID, sendeeType, recipientId, recipientType, content) {
    $.ajax({
        type: "POST",
        url: "/WS/UIServices.asmx/SendMessage",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ 'content': content, 'SendeeType': sendeeType, 'SendeeId': sendeeID, 'RecipientType': recipientType, 'RecipientId': recipientId, 'taskID': taskID }),
        dataType: "json",
        success: function (msg) {

            // refresh chat area
            LoadMessages(false);
        },
        error: function () { alert("error"); }
    });
}

如您所见,我在请求中传递了服务/收件人信息。显然代码非常危险,因为任何人都可以修改这些值并冒充任何用户。

我在服务器端的SESSION变量中有当前登录用户,但代码运行异步,这意味着会话变量在运行时未定义。

通过AJAX安全运行这些操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

有两种选择:

  1. 您可以加密ajax请求,例如this code project article 或将SSL用于网站。

  2. IHttpAsyncHandler中实施您的服务器代码,并实施IRequiresSessionState,以便您有权访问该会话。

  3. http://msdn.microsoft.com/en-us/magazine/cc164128.aspx

    is it possible to run async call to set a session in ASP.NET?

    使用ssl始终是首选,但如果您有时间实施,其他选项也是可行的。