elGringo Posted February 16, 2016 Share Posted February 16, 2016 Hello, guys, professionals! I don't have a lot experience in web development, so I want to ask simple questions! -What is Session in UniGI? Is that some file on the server like in PHP ? Or is that copy of programm, started on the Server? -How to Use it? Basic, popular examples of using it? I know one - to Add JS UniSession.AddJS('alert(''This is message from JS '')'); Could you explain basic things about session? Quote Link to comment Share on other sites More sharing options...
Skepsis IT Posted February 16, 2016 Share Posted February 16, 2016 I'll try to describe it as simple as I can. When a user loads unigui app on his browser a session is started for this user, let's say as a channel of conmunication. Everything that is placed on your server module let's say a constant is common for all sessions for all users, on the other hand the properties thar are placed on mainmodule are "alive" only for the current session. When a session is restarted mainmodule reinitialized. That's for a start. You must experiment a little bit for better understanding. I hope this was helpful a little bit for you Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 16, 2016 Author Share Posted February 16, 2016 So, when session is active (not termiated) i can communicate with Server. Send or Recieve files, variables, streams, constants and so on? Quote Link to comment Share on other sites More sharing options...
Skepsis IT Posted February 16, 2016 Share Posted February 16, 2016 Of course. Session is active according to session timeout you set on mainmodule. Quote Link to comment Share on other sites More sharing options...
Skepsis IT Posted February 16, 2016 Share Posted February 16, 2016 Of course. Session is active according to session timeout you set on mainmodule. Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 16, 2016 Author Share Posted February 16, 2016 Thank you for the answer. I think you are right about experiments! In generall i understand but details... ...only in practice!!! Quote Link to comment Share on other sites More sharing options...
Skepsis IT Posted February 16, 2016 Share Posted February 16, 2016 I believe that at this forum, a lot of people including me had little or not at all experience in web development because we came from delphi world. And now, thanks to Farshad and his team, we create sophisticated web applications. The result came from a lot of experiment with unigui product and of course read almost all posts of the forum, yes "all". As you know my friend "No pain, no gain" Regards 1 Quote Link to comment Share on other sites More sharing options...
Administrators Farshad Mohajeri Posted February 17, 2016 Administrators Share Posted February 17, 2016 We are improving docs. With each new incremental builds you will see a big change in documents. Thanks for your patience! 3 Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 17, 2016 Author Share Posted February 17, 2016 Good news!!! Quote Link to comment Share on other sites More sharing options...
Ron Posted February 17, 2016 Share Posted February 17, 2016 This is how I assume things work: When you initiate the app, an instance of mainmodule is created, and a unique session constant is created and associated with that instance, and this constant is also stored in the browser. As you go on using the instance, a check is performed for every request, comparing the browser stored constant with the mainmodule constant, and as long as these match, the session is considered alive. Also, a session timeout timer is running at the servermodule, and if this gets triggered, the session constant is cleared, effectively blocking any further requests from the browser, and the servermodule then reports the timeout and offers a reload to the browser. After using Unigui for a while, I do not really see such a great need for documentation. I know it sounds weird, but it is almost a good thing that you have to work a bit in the beginning, having a somewhat steep learning curve, because you then learn the stuff in a practical way, and that sticks. 2 Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 18, 2016 Author Share Posted February 18, 2016 Thank you! DelphiDude!!! You must me a genious))) I mean you don't need documentation. But I see the sense in your words - a lot of things are the same like in Delphi and it helps. Quote Link to comment Share on other sites More sharing options...
Mohammed Nasman Posted February 18, 2016 Share Posted February 18, 2016 In web development sessions has two meaning: 1. Session is an instance for the application with unique ID, it's for one users, for one browser (each tab on chrome has new session even if the same user is logged), each session has it's memory and events dedicate to it, and no session will see other sessions data. session usually has a timeout time (usually 20 min), and if user will be idle for this amount of time, the session will be terminated and all data (not saved) will be lost. 2. Session object, it's an object dictionary for each session instance, and it could be access within the application for the same (session id only), for example you can use it as Session['MyUser'] := 'ABC', so you can read it from other pages but in UniGui you declare variables inside "TUniMainModule" and it will be access for the same users on all forms. in both cases, if session timeout (expired) all data will be lost. Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 18, 2016 Author Share Posted February 18, 2016 Mohhamed! Thank you for such detailed answer!!! Before asking that - I also thought that its some copy / instance of the programm but I have read some topics of "What is session" for different technologies, like PHP, and decided to ask here. So, session is instance - clear for me, thank you. As for the second point - if i understand correct - lets take real example from Demos C:\Program Files (x86)\FMSoft\Framework\uniGUI\Demos\Desktop\SessionTimeout We declare in MainModule variable AllowTerminate : Boolean; and call it in Main procedure TMainForm.UniCheckBox1Click(Sender: TObject); begin UniMainModule.AllowTerminate:=UniCheckBox1.Checked; end; Is that good example for your 2 point? And in other instance there will be another variable AllowTerminate - if I understand you correct? And if I want to share some variable beetwen sessions - if I understand correct - I should keep it on the ServerModule? Quote Link to comment Share on other sites More sharing options...
Mohammed Nasman Posted February 18, 2016 Share Posted February 18, 2016 Hi elGringo, Glad I help to clear some things regarding your question regarding AllowTerminate variable, this will effect point 1 & 2, because it will not the let session terminate when it's reach it's time out, it's used to extend the session for another perid of time, look at OnSessionTimeout in UniGUIMainModule: procedure TUniMainModule.UniGUIMainModuleSessionTimeout(ASession: TObject; var ExtendTimeOut: Integer); begin if not AllowTerminate then begin ExtendTimeOut:=15000; // extend session for another 15 seconds end; end; Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 18, 2016 Author Share Posted February 18, 2016 I agree, my example is for both 1&2))) Just if it would be any other variable than it will not exist after we will destroy the instance, as I understand. Ok theme is almost clear for me - thank you Mohhamed and All for attention!!! Other details in experiments and practice! Quote Link to comment Share on other sites More sharing options...
Darth Florus Posted February 18, 2016 Share Posted February 18, 2016 Awesome: I don't notice that be can possible to extend Session Timeout before occurs. This could be usefull to stop timeout when a database action is take to long (extract detailed reports), wating process finishing a so on.... Thanks a lot! Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 18, 2016 Author Share Posted February 18, 2016 Oscar, Mohhamed, Delphidude, Farshad, skepsis, and how do you think - what is normal practice for SessionTimeout Management in real Application? I tested simple Application for 15 hours with this code above and it was working. Server responded the answer. In real Application - how is it better to manage SessionTimeout - to set it to 24 hours for example? -or to set it endless how in the example above? Because on the one hand it's not good when Application Terminated when user is working. On another hand as I understood when user close the tab application terminated automatically. Then endless Session seems to be the best variant? Quote Link to comment Share on other sites More sharing options...
Darth Florus Posted February 18, 2016 Share Posted February 18, 2016 Good I will talk by my experience: Users are a lot of .... people, they arrives on his work place, turn on his computers, log on in the web app, and goes to breakfast, drink terere or cafe, o small talk with the secretary, and when a customer arrives sit down on this place and want o use the web app, and surprise.....a timeout error occurs...and of course they complain. That's because I implement a timer that every 5 mins take a call to the server to do something, sometimes read a database table of messages to search if they are any for the current user o wherever else. This process maintain alive his session for ever. But sometimes the connection to the server is lost by for example for a internet down, normally on a branch on other city. Then a timeout is needed to clean up session temporary files, database connections, a so on. When a user executes a report that takes to long to respond (normally when generate pdf file to publish to) the session must keep alive until finish the generation and ever more. I put a big button to logout to all pages to suggest users to push it when they want to close app, but never use it, always use the red close button from browser windows. Then a timeout process is needed to do in this case. I notice that UniGui now have a event when this occurs. Last thing, you developers must to be very carefull when use database transactions to update data with a crud (database record maintenance). The transaction must start and finish in the same event (buttonOnClick, OnKeyPress, etc.) if you left the transaction active between ajax call probably you wil cry later because user can swear that he update the data, but data is gone from database because never occurs a commit. If a timeout occurs in this time the could be happen. I always be not satisfied with the actual session model of UniGui. I understand that the point is to be closer than Desktop/VCL apps is working but in web world could not be the best model. I never talk with Farshad about this because I think they have more importans things to do and there are more urgents. But I think that in a future of UniGui must have a way to implement a pool of sessions instead of create a session for every user that browse a page. 2 Quote Link to comment Share on other sites More sharing options...
Skepsis IT Posted February 18, 2016 Share Posted February 18, 2016 Well done Oscar Flor. A real life scenario. I agree with you 100% Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 18, 2016 Author Share Posted February 18, 2016 Wow! That is very detailed answer, Oscar!!! So, if to assume your practice - best practice will be -keep session alive (by "doing something" with server or maybe with AllowTerminate:=false; like above) -terminate session on Connection down to clean temporary files -to put "false" CloseApp button, and on click not to terminate, and real termination will be on closing browser tab -to keep transactions in one event Good advices for the beginners!!! Thank you!!! Quote Link to comment Share on other sites More sharing options...
Darth Florus Posted February 18, 2016 Share Posted February 18, 2016 Something like that Quote Link to comment Share on other sites More sharing options...
Ron Posted February 19, 2016 Share Posted February 19, 2016 Well, there was a time when I really wanted documentation - I can easily admit that. When I started using Unigui and looked at the examples, and found not a single piece of code that did anything, I was really scratching my head, wondering what was happening. At that time I thought to myself, "How come Farshad could not write just a single line to tell where the magic was happening?" Of course the code was there, buried within the Ext events for example....because the example was definitely working. But I did not have to search a lot to find this - after all there is not an unlimited number of places to search ! My point is that if you then spend 5 minutes searching and swearing, and eventually find the code, you will not easily forget how this was done. I would not really call this a steep learning curve. Tell me which other web dev system you can learn in a couple of weeks, a few hours each day, and which is so easy to master once you get the hang of it. Bottom line is that the need for documentation when using Unigui is not even close to the need of other systems, and that is why - that is why - Unigui has gained such popularity even with practically no documentation. Beat that! Of course the forum has been critical in this process, and if I should choose, I would go for the forum instead of the doc's, because you get the social support of seeing many others using it, and that is sweet. 2 Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 19, 2016 Author Share Posted February 19, 2016 Completely agree!!! 5 minutes, and some times 5 days for finding decision and you will never forget how did you do this. But nevertheless I post such "findings" to my blog - because after year sometimes it is faster to take a look on couple of strings that can help you! And also they can help to someone else! So, I think this topic can be closed!!! The answer is received. Thank you everyone for discussion!!! Quote Link to comment Share on other sites More sharing options...
elGringo Posted February 19, 2016 Author Share Posted February 19, 2016 Completely agree!!! 5 minutes, and some times 5 days for finding decision and you will never forget how did you do this. But nevertheless I post such "findings" to my blog - because after year sometimes it is faster to take a look on couple of strings that can help you! And also they can help to someone else! So, I think this topic can be closed!!! The answer is received. Thank you everyone for discussion!!! 1 Quote Link to comment Share on other sites More sharing options...
Mohammed Nasman Posted February 20, 2016 Share Posted February 20, 2016 I agree with Oscar, I think the session model build from first to match the desktop systems, specially when UniGui has double compile for desktop/web for same application. elGringo, I think you should little differently with web users, if user open his application and didn't use it for hours, why he should allocate session on the server? in most web languages they have default session time for less than 30 min (asp.net 20Min, php 24 Min), I would think between 30 min and one hour is very reasonable time, otherwise if users never touch the application for longer than that time, his/her session should be terminated and this resources should be allocated for another users. also each session it allocate around 10MB as session on server, so if you have 100 active session * 10 = 1GB of server RAM, beside the allocated cache folder for each session. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.