GVKun编程网logo

node.js – 在快捷框架中的会话中得到奇怪的错误(nodejs快捷键)

6

如果您想了解node.js–在快捷框架中的会话中得到奇怪的错误的相关知识,那么本文是一篇不可错过的文章,我们将对nodejs快捷键进行全面详尽的解释,并且为您提供关于ASP.NetMVC3奇怪的会话行

如果您想了解node.js – 在快捷框架中的会话中得到奇怪的错误的相关知识,那么本文是一篇不可错过的文章,我们将对nodejs快捷键进行全面详尽的解释,并且为您提供关于ASP.Net MVC 3奇怪的会话行为、Express框架给出了一个非常奇怪的错误、Gdi与MSVC编译器得到奇怪的“本机图形”运行时错误、Gin框架中的会话管理及其应用的有价值的信息。

本文目录一览:

node.js – 在快捷框架中的会话中得到奇怪的错误(nodejs快捷键)

node.js – 在快捷框架中的会话中得到奇怪的错误(nodejs快捷键)

我是新的表达框架,这里是我有在server.js文件:

// Module dependencies.
var application_root = __dirname,express = require( 'express' ),//Web framework
path = require( 'path' ),//Utilities for dealing with file paths
mongoose = require( 'mongoose' ); //MongoDB integration

//Create server
var app = express();

// Configure server
app.configure( function() {

app.use( express.bodyParser() );
app.use( express.methodoverride() );
app.use( app.router );
app.use(express.session({secret:'thisismysupersecret'}));
app.use( express.static( path.join( application_root,'site') ) );
app.use( express.errorHandler({ dumpExceptions: true,showStack: true }));
});
app.post("/verifyLogin",function(request,response){
var usr=request.body.username;
var pass=request.body.password;
//request.session.email=usr;
response.redirect('dashboard');
});

//Start server
var port = 3000;
app.listen( port,function() {
console.log( 'Express server listening on port %d in %s mode',port,app.settings.env);
});

当我导航到localhost:3000我得到这个错误

500 TypeError: Cannot read property ‘connect.sid’ of undefined

问题在哪里?

解决方法

您缺少cookieParser中间件:

...
app.use( express.cookieParser() );
app.use(express.session({secret:'thisismysupersecret'}));
...

(因为会话是使用cookie实现的)。

ASP.Net MVC 3奇怪的会话行为

ASP.Net MVC 3奇怪的会话行为

我有一个mvc 3应用程序,我正在使用我自己的登录视图实现授权,该视图检查是否允许用户名和密码,然后在会话中设置一个变量来表示用户已登录.这种方法有效但是对于一个特定的观点,它表现出一种奇怪的不良方式.所述视图包含一个表单,我用它来输入一些数据并上传文件.由于某些我无法弄清楚的原因,在发布此表单后,将启动一个新会话,因此记住用户已登录的变量将重置为false,然后再次显示登录页面.

我迷失了为什么应用程序此时正在开始一个新的会话?我没有指示它这样做.任何人都可以推荐解决方案来阻止这种行为并让它保持旧会话?

谢谢.

更新 – 一些代码:

请注意,会话似乎在对发布的“创建”表单的响应后立即终止

CMS控制器在所有操作上使用名为“RDAutorize”的自定义Autorize属性:

[RDAuthorize]
public class PhotoCMSController : Controller
{

public ActionResult Create()
{
    /* Code omitted: set up a newPhoto object with default state */
    /* display view containing form to upload photo and set title etc. */
    return View("../Views/PhotoCMS/Create",newPhoto);
}

[HttpPost]
public ContentResult Upload(int pPhotoId)
{   
    /* Code ommited: receive and store image file which was posted
     via an iframe on the Create view */  
    string thumbnail = "<img src='/path/to/thumb.jpg' />";
    return Content(thumbnail);
}

[HttpPost]
public ActionResult Create(string pPhotoTitle,string pCaption etc...)
{
     /*Code omitted: receive the rest of the photo data and save
      it along with a reference to the image file which was uploaded
      prevIoUsly via the Upload action above.*/

      /* display view showing list of all photo records created */
      return View("../Views/PhotoCMS/Index",qAllPhotos.ToList<Photo>());

      /* **Note: after this view is returned the Session_End() method fires in 
       the Global.asax.cs file i.e. this seems to be where the session is
       being lost** */
}

}/*End of CMS Controller*/

自定义授权操作过滤器:

public class RDAuthorize : ActionFilterattribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Boolean authorized = Convert.ToBoolean(
            HttpContext.Current.Session["UserIsAuthorized"]
        );

        if (!authorized) {
            /* Not logged in so send user to the login page */
            filterContext.HttpContext.Response.Redirect("/Login/Login");
        }
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext) {}
    public override void OnResultExecuting(ResultExecutingContext filterContext) {}
    public override void OnResultExecuted(ResultExecutedContext filterContext) {}

}/*End of Authorize Action Filter*/

登录控制器:

public class LoginController : Controller
{
    private PhotoDBContext _db = new PhotoDBContext();

    public ActionResult Login()
    {
        string viewName = "";
        Boolean authorized = Convert.ToBoolean(Session["UserIsAuthorized"]);
        if (authorized)
        {
            viewName = "../Views/Index";
        }
        else
        {
            viewName = "../Views/Login/Login";
        }
        return View(viewName);
    }

    [HttpPost]
    public ActionResult Login(string pUsername,string pPassword)
    {
        string viewName = "";
        List<Photo> model = new List<Photo>();

        var qUsers = from u in _db.Users
                select u;

        foreach (User user in qUsers.ToList<User>())
        {
            /* If authorized goto CMS pages */
            if (pUsername == user.Username && pPassword == user.Password)
            {
                Session["UserIsAuthorized"] = true;
                var qPhotos = from p in _db.Photos
                              where p.IsNew == false
                              select p;

                model = qPhotos.ToList<Photo>();
                viewName = "../Views/PhotoCMS/Index";
                break;
            }
        }

        return View(viewName,model);

    }

}/* End of Login controller */

解决方法

事实证明整个ASP.Net应用程序正在重新启动,因为作为照片上传的一部分,我将图像文件存储在临时文件夹中,然后在将文件移动到永久位置后删除目录.显然,如果删除了网站中的目录,ASP.Net的默认行为将重新启动.我发现这个 post
它描述了问题并提供了一个解决方案,将以下代码添加到Global.asax.cs文件中.实施此解决方案已解决了该问题.通过从Application_Start()事件调用FixAppDomainRestartWhenTouchingFiles()来应用此修复:

protected void Application_Start()
    {
        FixAppDomainRestartWhenTouchingFiles();
    }

    private void FixAppDomainRestartWhenTouchingFiles()
    {
        if (GetCurrentTrustLevel() == AspNetHostingPermissionLevel.Unrestricted)
        {
            /* 
             From: http://www.aaronblake.co.uk/blog/2009/09/28/bug-fix-application-restarts-on-directory-delete-in-asp-net/
             FIX disable AppDomain restart when deleting subdirectory
             This code will turn off monitoring from the root website directory.
             Monitoring of Bin,App_Themes and other folders will still be 
             operational,so updated DLLs will still auto deploy.
            */

            PropertyInfo p = typeof(HttpRuntime).GetProperty(
                "FileChangesMonitor",BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
            object o = p.GetValue(null,null);
            FieldInfo f = o.GetType().GetField(
                "_dirMonSubdirs",BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
            object monitor = f.GetValue(o);
            MethodInfo m = monitor.GetType().getmethod(
                "StopMonitoring",BindingFlags.Instance | BindingFlags.NonPublic);
            m.Invoke(monitor,new object[] { });
        }
    }

    private AspNetHostingPermissionLevel GetCurrentTrustLevel()
    {
        foreach (AspNetHostingPermissionLevel trustLevel in
            new AspNetHostingPermissionLevel[] {
                AspNetHostingPermissionLevel.Unrestricted,AspNetHostingPermissionLevel.High,AspNetHostingPermissionLevel.Medium,AspNetHostingPermissionLevel.Low,AspNetHostingPermissionLevel.Minimal }
            )
        {
            try
            {
                new AspNetHostingPermission(trustLevel).Demand();
            }
            catch (System.Security.SecurityException)
            {
                continue;
            }

            return trustLevel;
        }

        return AspNetHostingPermissionLevel.None;
    }

Express框架给出了一个非常奇怪的错误

Express框架给出了一个非常奇怪的错误

我正在尝试在节点中使用Express,安装一切正常,进行编译,获取npm并通过以下方式安装express:

npm安装快递

问题是,每次我尝试“要求”它时,都会给我一个错误!看一下一个简单的文件app.js:

var express = require(''express'');

当我运行它时:

tlab065:~/proj/Express-server-abstraction> node app.js node.js:116        throw e; // process.nextTick error, or ''error'' event on first tick        ^TypeError: Cannot read property ''prototype'' of undefined    at Object.<anonymous> (/people/home/jdomingues/local/node/lib/node/.npm/express/1.0.7/package/lib/express/server.js:87:44)        at Module._compile (module.js:373:26)    at Object..js (module.js:379:10)    at Module.load (module.js:305:31)    at Function._load (module.js:271:10)    at require (module.js:317:19)    at Object.<anonymous> (/people/home/jdomingues/local/node/lib/node/.npm/express/1.0.7/package/lib/express/index.js:28:31)    at Module._compile (module.js:373:26)    at Object..js (module.js:379:10)    at Module.load (module.js:305:31

有人能帮我吗?为什么会出现此错误?如何安装与Express不同的版本?

答案1

小编典典

问题是,你可能有最新的连接(而不是“您需要安装最新的连接”)的命令@Shripad显示是有益的,可能会告诉你,你有连接1.0,
......嗯哦表达ISN还没有为1.0连接做好准备,请执行以下操作回到0.5.10:

npm install connect@0.5.10

Gdi与MSVC编译器得到奇怪的“本机图形”运行时错误

Gdi与MSVC编译器得到奇怪的“本机图形”运行时错误

好的,直到现在我总是用GCC编码,所以我是MSVC的新手(这是错误的).我用GDI plus编译了一个最小的Win Api程序.它编译得很好,但几乎在启动时就会出现运行时错误(我认为在调用WM_PAINT消息时会出现运行时错误).这是我看到的:
 

我的代码没什么特别的,只是显示一个矩形. (当我使用GDI时它工作正常,但不适用于GDI).

我的代码:

HDC hdc = GetDC(hwnd);

InvalidateRect(hwnd,NULL,FALSE);

ULONG_PTR token;
GdiplusstartupInput inp;
Gdiplusstartup(&token,&inp,0);

Graphics g(hdc);
g.Clear(Color(0,0));
g.DrawRectangle(new Pen(Color(0,0)),10,100,100);

GdiplusShutdown(token);
ValidateRect(hwnd,NULL);

通过调试我发现运行时错误几乎就是Graphics g(hdc);构造函数被调用.我在Google等上找不到任何东西.我完全迷失了.有帮助吗?

解决方法

WinAPI函数总是以这种或那种方式表示成功.您需要检查GetDC是否返回了有效句柄.请参阅 Return value section of GetDC.输出中的访问冲突也指向某处的无效指针.如果DC有效,请检查其他所有内容.确保传递指向需要地址的指针等.

Gin框架中的会话管理及其应用

Gin框架中的会话管理及其应用

gin框架是一种轻量级的web框架,它采用go语言开发,并且具有高效性、易用性、灵活性等优点。在web应用开发中,会话管理是一个非常重要的话题,它可以用于保存用户信息、验证用户身份、防止csrf攻击等。本文将介绍gin框架中的会话管理机制以及其应用。

一、会话管理机制

在Gin框架中,会话管理是通过中间件(Middleware)实现的。Gin框架提供了一个session包,它封装了会话管理所需的操作。在使用session包前,需要先安装它,在终端输入以下命令即可:

go get github.com/gin-contrib/sessions
登录后复制

session包提供了四种会话管理方式:Cookie、内存存储、文件存储、Redis存储。其中,内存存储和文件存储是默认的,而Redis存储需要安装redis-go-driver包,并在代码中导入该包。下面以Cookie方式为例,介绍会话管理的实现。

  1. 创建会话中间件
package main

import (
    "github.com/gin-contrib/sessions"
    "github.com/gin-contrib/sessions/cookie"
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    // 设置会话中间件
    store := cookie.NewStore([]byte("secret"))
    router.Use(sessions.Sessions("mysession", store))

    router.GET("/set", setHandler)
    router.GET("/get", getHandler)

    router.Run(":8080")
}

func setHandler(c *gin.Context) {
    session := sessions.Default(c)
    session.Set("user", "John")
    session.Save()
    c.String(200, "Session saved.")
}

func getHandler(c *gin.Context) {
    session := sessions.Default(c)
    user := session.Get("user")
    c.String(200, "User is %v.", user)
}
登录后复制

在上述代码中,我们创建了一个cookie存储方式的会话中间件,并将其绑定到Gin引擎上。其中,第一个参数“mysession”表示会话的名称,第二个参数[]byte("secret")是一个密钥,它用于加密cookie中的值。在setHandler中,我们使用session.Set()方法设置了一个键值对,然后调用session.Save()方法将会话保存。在getHandler中,我们使用session.Get()方法获取用户信息,并在响应中输出。

  1. 测试会话管理

在终端输入以下命令启动服务:

go run main.go
登录后复制

在浏览器中输入以下地址:

http://localhost:8080/set
登录后复制

然后再输入:

http://localhost:8080/get
登录后复制

可以看到响应信息为:

User is John.
登录后复制

这说明我们成功地创建了一个会话并保存了用户信息。

二、会话管理的应用

在Web应用中,会话管理通常用于以下场景:

  1. 用户认证

用户认证是Web应用中最常见的场景之一,它用于判断用户是否登录,以及用户是否有权访问某些资源。在Gin框架中,我们可以将用户信息存储在会话中,并在需要认证的地方进行检查。下面是一个简单的用户认证示例:

func authHandler(c *gin.Context) {
    session := sessions.Default(c)
    user := session.Get("user")
    if user == nil {
        c.Redirect(http.StatusFound, "/login")
        return
    }
    // 验证用户身份
    if user != "admin" {
        c.AbortWithStatus(http.StatusUnauthorized)
        return
    }
    c.String(200, "Hello, admin.")
}
登录后复制

在上述代码中,我们首先使用session.Get()方法获取用户信息,如果用户未登录,则重定向到登录页面。如果用户已登录,则验证其身份是否为管理员。如果是管理员,则输出“Hello, admin.”,否则返回401 Unauthorized。

  1. 防止CSRF攻击

Cross-Site Request Forgery(跨站请求伪造,简称CSRF)是一种常见的Web攻击方式,它会利用浏览器的Cookie机制,伪造请求从而实现攻击目的。在Gin框架中,我们可以使用会话来防止CSRF攻击。具体做法是,在每次表单提交时,我们都向表单中添加一个csrf_token字段,然后将该字段存储到会话中。在后续每次请求中,我们都可以检查该token是否与会话中存储的一致。下面是一个简单的CSRF防御示例:

func csrfHandler(c *gin.Context) {
    session := sessions.Default(c)
    token := session.Get("csrf_token")
    if token == nil || token != c.PostForm("csrf_token") {
        c.AbortWithStatus(http.StatusBadRequest)
        return
    }
    // 处理表单提交
    c.String(200, "Form submitted.")
}

func formHandler(c *gin.Context) {
    session := sessions.Default(c)
    token := uuid.New().String()
    session.Set("csrf_token", token)
    session.Save()
    c.HTML(http.StatusOK, "form.html", gin.H{
        "csrf_token": token,
    })
}
登录后复制

在上述代码中,我们首先将表单中的csrf_token值与会话中存储的token值进行比较。如果不一致,则返回400 Bad Request状态码。如果一致,则处理表单提交,并输出“Form submitted.”。在表单加载时,我们使用uuid包生成一个唯一的token值,然后将该值存储到会话中,最后将表单页面返回给用户。

三、总结

在本文中,我们介绍了Gin框架中的会话管理机制及其应用。会话管理是Web应用开发中的一个重要话题,它可以用于保存用户信息、验证用户身份、防止CSRF攻击等。在Gin框架中,我们可以使用中间件来实现会话管理,而session包则为我们提供了方便的操作接口。在实际应用中,我们还可以结合其他功能模块,如认证、授权、加密、日志等,来构建更加完善的Web应用系统。

以上就是Gin框架中的会话管理及其应用的详细内容,更多请关注php中文网其它相关文章!

关于node.js – 在快捷框架中的会话中得到奇怪的错误nodejs快捷键的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ASP.Net MVC 3奇怪的会话行为、Express框架给出了一个非常奇怪的错误、Gdi与MSVC编译器得到奇怪的“本机图形”运行时错误、Gin框架中的会话管理及其应用等相关内容,可以在本站寻找。

本文标签: