如果您想了解node.js–在快捷框架中的会话中得到奇怪的错误的相关知识,那么本文是一篇不可错过的文章,我们将对nodejs快捷键进行全面详尽的解释,并且为您提供关于ASP.NetMVC3奇怪的会话行
如果您想了解node.js – 在快捷框架中的会话中得到奇怪的错误的相关知识,那么本文是一篇不可错过的文章,我们将对nodejs快捷键进行全面详尽的解释,并且为您提供关于ASP.Net MVC 3奇怪的会话行为、Express框架给出了一个非常奇怪的错误、Gdi与MSVC编译器得到奇怪的“本机图形”运行时错误、Gin框架中的会话管理及其应用的有价值的信息。
本文目录一览:- node.js – 在快捷框架中的会话中得到奇怪的错误(nodejs快捷键)
- ASP.Net MVC 3奇怪的会话行为
- Express框架给出了一个非常奇怪的错误
- Gdi与MSVC编译器得到奇怪的“本机图形”运行时错误
- Gin框架中的会话管理及其应用
node.js – 在快捷框架中的会话中得到奇怪的错误(nodejs快捷键)
// 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
问题在哪里?
解决方法
... app.use( express.cookieParser() ); app.use(express.session({secret:'thisismysupersecret'})); ...
(因为会话是使用cookie实现的)。
ASP.Net MVC 3奇怪的会话行为
我迷失了为什么应用程序此时正在开始一个新的会话?我没有指示它这样做.任何人都可以推荐解决方案来阻止这种行为并让它保持旧会话?
谢谢.
更新 – 一些代码:
请注意,会话似乎在对发布的“创建”表单的响应后立即终止
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 */
解决方法
它描述了问题并提供了一个解决方案,将以下代码添加到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,安装一切正常,进行编译,获取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时它工作正常,但不适用于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等上找不到任何东西.我完全迷失了.有帮助吗?
解决方法
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方式为例,介绍会话管理的实现。
- 创建会话中间件
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()方法获取用户信息,并在响应中输出。
- 测试会话管理
在终端输入以下命令启动服务:
go run main.go
在浏览器中输入以下地址:
http://localhost:8080/set
然后再输入:
http://localhost:8080/get
可以看到响应信息为:
User is John.
这说明我们成功地创建了一个会话并保存了用户信息。
二、会话管理的应用
在Web应用中,会话管理通常用于以下场景:
- 用户认证
用户认证是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。
- 防止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框架中的会话管理及其应用等相关内容,可以在本站寻找。
本文标签: