Re: References in Sessions
| From: | Sebastian Detert | Date: | Mon, 11 Oct 2010 14:43:06 +0000 |
| Subject: | Re: References in Sessions | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-308623@lists.php.net to get a copy of this message | ||
Alexander Schrijver schrieb:
Hi list, I'm working on a project which uses a MySQL database to store some data. The database looks something like this: Companies - id (PK) - name - sector_id -> Sectors (id) - etc Locations - id (PK) - company_id -> Companies (id) - name - etc Sectors - id (PK) - name - etc And we're using a Session to store references (not actual PHP references ofcourse just the identifying integers) to these tables. For example a list of companies and locations which are selected in the GUI is kept in the session state. The session would look something like this when filled up. The integers are the PKs of the companies and sectors tables respectively. Companies = Array (1,2,3,4,etc) Sectors = Array (1,2,3,4,etc) The problem is: when there are 2 clients one administrative and one user, and the user has selected a company (or something else, it doesn't really matter). And then the administrative user comes along and deletes the row which the user just selected from the company table. There is an invalid reference in the Session of the user. I figured if I saved the session in the database and used constraints (foreign keys) to enforce this. This could work. However, the PHP session abstraction makes it very difficult to implement this properly. (I looked at session_set_save_handler) How do you guys deal with this problem? Thanks, Alexander Why don't you write a small function checking for invalid IDs and delete them and referenced subIDs? If you guess it's to hard/slow to find out all referenced subIDs you could change your Session array to an multi-dimensional array, with all referenced IDs on lower levelsarray ( sector_id => array ( company_id => array (location_id) ) ); like array ( 1 => array (17,4 => array(2)) would mean that loction 2 inside company 4 inside section 1 was selected. This way you only need to delete an old entry, and all referenced IDs dissapear Sebastian