I have a server application that runs in a hosted environment but creates print jobs in the client’s local network (behind NAT; the mechanics of this is not relevant).
In order to send the print job to the printer that is attached to the workstation, I need to identify the workstation. The users move around between workstations, so I can’t permanently associate a user with a workstation/printer. The trivial solution is to require the user to identify the machine he is logging in from, for instance by selecting from a list, but that’s an inconvenience and subject to user error.
Options I have eliminated:
- Host header variables (nothing identifiable is sent)
- Cookies, in support of a user selection. This somewhat addresses the potential for user error, but not really.
- HTML5 DOM Storage – is not supported by the client’s browser
Any other ideas?
Edit: I do have the option of puttnig this particular function (create a print job) into a thick client app. The app can then of course be configured and the problem goes away. But the user experience will suffer from having to switch between the browser and a Windows app.
I won’t discuss your strange scenario, just answer your question: how to identify a machine?
Well, there is no close-form solution at current time with HTTP protocol. All machines share the same IP since they are behind NAT. You can’t get MAC address. You can’t get hardware identifiers. You can’t be sure that all machine will send different headers to the server (ie. all different browsers/version).
You may rely on cookies. Try to create some form of machine authentication, or better, machine identification page, browse it once from each machine telling the server which is the printer to use on that machine, and then set a permanent cookie on that machine.
As soon as cookies won’t be deleted (maybe you can always renew the cookie, you never know…) you have a simple mechanism.
It’s the best I can suggest 🙁